Commit 06fa0259 by Qiang Xue

Added Controller::populate().

parent f5f3d2e4
<?php
use yii\web\Controller;
use app\models\LoginForm;
use app\models\User;
class SiteController extends \yii\web\Controller
class SiteController extends Controller
{
public function actionIndex()
{
......@@ -13,15 +13,13 @@ class SiteController extends \yii\web\Controller
public function actionLogin()
{
$model = new LoginForm();
if (isset($_POST[$model->formName()])) {
$model->attributes = $_POST[$model->formName()];
if ($model->login()) {
Yii::$app->getResponse()->redirect(array('site/index'));
}
if ($this->populate($_POST, $model) && $model->login()) {
Yii::$app->getResponse()->redirect(array('site/index'));
} else {
echo $this->render('login', array(
'model' => $model,
));
}
echo $this->render('login', array(
'model' => $model,
));
}
public function actionLogout()
......
......@@ -42,7 +42,7 @@ class LoginForm extends Model
{
if ($this->validate()) {
$user = User::findByUsername($this->username);
Yii::$app->getUser()->login($user);
Yii::$app->getUser()->login($user, $this->rememberMe ? 3600*24*30 : 0);
return true;
} else {
return false;
......
......@@ -303,6 +303,34 @@ class Controller extends Component
}
/**
* Populates one or multiple models from the given data array.
* @param array $data the data array. This is usually `$_POST` or `$_GET`, but can also be any valid array.
* @param Model $model the model to be populated. If there are more than one model to be populated,
* you may supply them as additional parameters.
* @return boolean whether at least one model is successfully populated with the data.
*/
public function populate($data, $model)
{
$success = false;
if (!empty($data) && is_array($data)) {
$models = func_get_args();
array_shift($models);
foreach ($models as $model) {
/** @var Model $model */
$scope = $model->formName();
if ($scope == '') {
$model->attributes = $data;
$success = true;
} elseif (isset($data[$scope])) {
$model->attributes = $data[$scope];
$success = true;
}
}
}
return $success;
}
/**
* Renders a view and applies layout if available.
*
* The view to be rendered can be specified in one of the following formats:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment