När en modell finns på plats, vidtar arbetet med att skriva logik som behövs för att manipulera modellen. Vi placerar denna logik i en kontrollers åtgärd (action). I exemplet med login-formuläret erfordras följande kod:
public function actionLogin()
{
$form=new LoginForm;
if(isset($_POST['LoginForm']))
{
// collects user input data
$form->attributes=$_POST['LoginForm'];
// validates user input and redirect to previous page if validated
if($form->validate())
$this->redirect(Yii::app()->user->returnUrl);
}
// displays the login form
$this->render('login',array('user'=>$form));
}
I ovanstående exempel skapas först en instans av LoginForm
; om inkommen
request är av typen POST (underförstått att det ifyllda login-formuläret
skickats), förses $form
med inskickad data $_POST['LoginForm']
; därefter
valideras inmatningen och om denna befinns korrekt styrs användarens webbläsare
till sidan som tidigare erfordrade autentisering. Om däremot valideringen
misslyckas, eller åtgärden körs initialt, renderas login
-vyn, vars innehåll
kommer att beskrivas i nästa underavsnitt.
Tips: I
login
-åtgärden användsYii::app()->user->returnUrl
för att få tag på URL:en till sidan som tidigare behövde autentisering. KomponentenYii::app()->user
är av typen CWebUser (eller nedärvd klass) vilken representerar information om användarsessionen (t.ex. användarnamn, status). För fler detaljer, se Autentisering och auktorisation.
Låt oss titta närmare på följande PHP-sats som förekommer i login
-åtgärden:
$form->attributes=$_POST['LoginForm'];
Som beskrivits i Säkra upp
attributtilldelningar,
tilldelar denna rad modellen de data användaren skickat in. Propertyn
attributes
definieras av CModel vilken förväntar sig en array av
namn-värdepar och tilldelar varje värde till motsvarande attribut i modellen. Så om
$_POST['LoginForm']
ger oss en sådan array, är ovanstående kodrad ekvivalent
med följande längre kodavsnitt (förutsatt att varje erforderligt attribut finns
med i arrayen):
$form->username=$_POST['LoginForm']['username'];
$form->password=$_POST['LoginForm']['password'];
$form->rememberMe=$_POST['LoginForm']['rememberMe'];
Märk: För att
$_POST['LoginForm']
skall ge oss en array i stället för en sträng, håller vi oss till en konvention vid namngivning av vyns inmatningsfält. Mer detaljerat, ett inmatningsfält som motsvarar ett attributa
i modellklassenC
, får nammnetC[a]
. Till exempel använder viLoginForm[username]
som namn på inmatningsfältet som motsvarar attributetusername
.
Den återstående uppgiften är nu att skapa login
-vyn vilken skall innehålla ett
HTML-formulär med de erforderliga inmatningsfälten.
Signup or Login in order to comment.