Použití render nebo action
- Under
- Člen | 23
Zdravím, řeším teď takový možná drobný problém, ale nevím co
s tím. Jedná se o primitivní proces ověření – verifikace uživatele.
Po příchod na určitou adresu(která se dříve odeslala na email) se aktivuje
účet.
Adresa je zhruba taková – http://stranka.com/verifikace/hash. Moc nevím, v jaké
fázi by se měl samotný kód provést. Zatím to mám takto
v actionVerify($hash):
<?php
public function actionVerify($hash){
//Look for an entry in the users table containing the corresponding hash
$values = dibi::query('SELECT id,username,verified,hash FROM users WHERE hash=%s', $hash);
if(empty($values)){
$message = "The verification link is broken or the user has already been verified.";
$somethingHasGoneWrong = TRUE;
} else {
dibi::query("UPDATE users SET verified='1',hash='' WHERE id=%i", $values['id']);
$message = "The user <u>$values[username]</u> has been successfully verified.";
$somethingHasGoneWrong = FALSE;
}
}
?>
Hodil jsem to do action, protože jestli jsem to pochopil správně, tak v render fázi by se měly provádět jen akce společné s šablonou a vykreslováním, což update dat v DB moc není. Když to mám takhle v action, tak ale vůbec nevím, jak renderu předat parametry – tj. výslednou message popř. jestli byla verifikace úspěšná nebo ne.
- newPOPE
- Člen | 648
Jednou z moznosti je predat hodnoty priamo v action.
$this->template->foo = "foo";
za co ma asi ostatni nebudu mat radi :-D.
dalsia moznost je pouzit atributy Presenteru
private $foo;
public function actionFoo() {
$this->foo = "...";
}
public function renderFoo() {
$this->template->foo = $this->foo;
}
tu je viac pisania. mne osobne sa viac paci prva moznost, kedze tie hodnoty este mozes ovplyvnit aj v `render`. No asi zalezi od konkretne od situacie...
- JakubJarabica
- Gold Partner | 184
Nebolo by fajn v action vytvoriť flashMessage a presmerovať na prihlásenie? Tým pádom už v action skončí životný cyklus verifikačného presenteru – nebude render, je to čisté a imho viac user friendly.