Być może wyda się Wam ten post strasznie niskiego lotu, być może nie powinienem w ogóle poruszać tego temat, jednak nie umiem zrozumieć co się tutaj dzieje.
Jestem w sytuacji świeżo po wygenerowaniu aplikacji za pomocą yiic, która utworzyła mi szkielet/trzon aplikacji, a że zaczynam z YII to gmeram po plikach, zmieniam, porównuję, zaprzyjaźniam się z błędami i ogólnie próbuję poznać tego FW
W kodzie kontrolera Site jest opisana funkcja actionLogin
public function actionLogin()
{
$model=new LoginForm();
echo '<pre>';
print_r($_POST);
echo '</pre>';
// if it is ajax validation request
if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
// collect user input data
if(isset($_POST['LoginForm']))
{
$model->attributes=$_POST['LoginForm'];
echo '<pre>';
print_r($model->getAttributes);
echo '</pre>';
// validate user input and redirect to the previous page if valid
if($model->validate() && $model->login())
$this->redirect(Yii::app()->user->returnUrl);
}
// display the login form
$this->render('login',array('model'=>$model));
}
Najbardziej interesuje mnie linia:
$mode->attributes = $_POST[;LoginForm'];
Rozumiem, że jest tworzony obiekt na podstawie modelu LoginForm, warunek dotyczący AJAX’a mnie nie interesuje i później jest sprawdzenie czy jest ustawione pole LoginForm w zmiennej $_POST i tu jest coś czego nie do końca ogarniam. Wydaje mi się, że tablicę przesyła do atrybutów utworzonego modelu - te które są public username,password,rememberMe jednak nie umiem tego jakoś sobie udowodnić.
Widze, że jest properties attributes dla CModel, którego zadaniem - wg mnie - jest "ułożenie" przekazanego mu parametru w zmiennych modelu, które są później wykorzystywane przy funkcji validate. Ale czy tak jest faktycznie ?
$model->attributes jest właściwością obiektu gromadzącą wszystkie właściwości w postaci tabeli. Można użyć mniej bezpośrednio $model->setAttributes($_POST[‘LoginForm’]) z takim samym skutkiem.
OK, czyli jest tak jak myślałem. CModel->attributes przypisuje to właściwości obiektu wartości, które się tam przypisują "magicznie" (każde do swojego pola). Pytanie #2 w jaki sposób mam sprawdzić, że faktycznie mi się one przypisały. Próbowałem CModel->getAttributes echować, jednak bez zadowalającego skutku.
PS. Dzięki za cierpliwość w tłumaczeniu tej podstawowo-podstawowej wiedzy.
Pamiętaj, że za pomocą $model->attributes=$_POST[‘LoginForm’]; “magicznie” zostaną przypisane tylko te atrybuty, które w modelu oznaczone są jako “safe”.
Jeśli atrybuty są wymienione w tablicy rules() w modelu to zazwyczaj są jako "safe" (wyjątek to reguła unsafe).
właśnie dotarłem do tego, że rules() w modelu to konieczna sprawa bo w innym wypadku CModel->attributes był ciągle pusty - jedno z moich poprzednich pytań. Odnośnie lektury obowiązkowej zapoznam się, a drugi link ( w wersji PL ) zatrzymałem się w miejscu, z którego post rusza.