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()
{
$model=new LoginForm;
if(isset($_POST['LoginForm']))
{
// collects user input data
$model->attributes=$_POST['LoginForm'];
// validates user input and redirect to previous page if validated
if($model->validate())
$this->redirect(Yii::app()->user->returnUrl);
}
// displays the login form
$this->render('login',array('model'=>$model));
}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 $model 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->returnUrlfö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:
$model->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):
$model->username=$_POST['LoginForm']['username'];
$model->password=$_POST['LoginForm']['password'];
$model->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 attributai 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.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.