Kiedy mamy już model, możemy rozpocząć pisanie logiki, którą potrzebujemy aby manipulować modelem. Umieszczamy tą logikę wewnątrz kontrolera akcji. Na przykład, dla logowania, potrzebujemy następującego kodu:
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));
}
W powyższym przykładzie na początku utworzyliśmy instancję modelu LoginForm
; gdy żądanie
jest żądaniem POST (co oznacza, że dane z formularza logowania zostały przesłane),
wypełniamy $model
przesłanymi danymi z $_POST['LoginForm']
; następnie sprawdzamy
poprawność danych wejściowych i jeśli są poprawne, przekierowujemy przeglądarkę użytkownika
na stronę, która poprzednio wymagała uwierzytelnienia. W przypadku gdy walidacja nie powiedzie się,
albo gdy akcja wywoływana jest po raz pierwszy generujemy widok login
, którego
zawartość będzie opisana w następnej sekcji.
Wskazówka: Podczas akcji
login
używamyYii::app()->user->returnUrl
aby otrzymać adres URL strony, która wymagała uwierzytelnienia. KomponentYii::app()->user
jest typu CWebUser (lub jego klasy potomne)i reprezentuje dane sesyjne użytkownika (np. nazwę użytkownika, status). Aby otrzymać więcej informacji zobacz Uwierzytelnienie i autoryzację.
Przyjrzyjmy się uważnie następującemu wyrażeniu PHP, które pojawia się w akcji
logowania login
:
$model->attributes=$_POST['LoginForm'];
Tak jak napisaliśmy w ochronie przypisania atrybutów,
ta linia kodu wypełnia model danymi przesłanymi przez użytkownika. Właściwość
attributes
jest definiowana przez klasę CModel i oczekuje tablicy par nazwa-wartość,
które potem przypisuje do każdej wartości atrybutu odpowiedniego modelu.
Zatem, jeśli $_POST['LoginForm']
zwróci nam taką tablicę, powyższy kod będzie
równoznaczny do następującego, długiego kodu (zakładając ze każdy wymagany atrybut
jest obecny w tablicy):
$model->username=$_POST['LoginForm']['username'];
$model->password=$_POST['LoginForm']['password'];
$model->rememberMe=$_POST['LoginForm']['rememberMe'];
Uwaga: Aby umożliwić
$_POST['LoginForm']
zwracanie tablicy zamiast łańcucha znaków, pozostajemy przy pewnej konwencji podczas nazywania pól wejściowych w widoku. W szczególności, dla pól wejściowych odpowiadających atrybutowia
modelu klasyC
nazywamy goC[a]
. Na przykład, użyjemyLoginForm[username]
aby nazwać pole wejściowe odpowiadające atrybutowiusername
.
Zadanie jaki nam pozostało, to utworzenie widoku login
, który powinien zawierać
formularz HTML wraz z wymaganymi polami wejściowymi.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.