Tworzenie akcji

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żywamy Yii::app()->user->returnUrl aby otrzymać adres URL strony, która wymagała uwierzytelnienia. Komponent Yii::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 atrybutowi a modelu klasy C nazywamy go C[a]. Na przykład, użyjemy LoginForm[username] aby nazwać pole wejściowe odpowiadające atrybutowi username.

Zadanie jaki nam pozostało, to utworzenie widoku login, który powinien zawierać formularz HTML wraz z wymaganymi polami wejściowymi.

$Id: form.action.txt 1837 2010-02-24 22:49:51Z qiang.xue $

Be the first person to leave a comment

Please to leave your comment.