Commit 06fa0259 by Qiang Xue

Added Controller::populate().

parent f5f3d2e4
<?php <?php
use yii\web\Controller;
use app\models\LoginForm; use app\models\LoginForm;
use app\models\User;
class SiteController extends \yii\web\Controller class SiteController extends Controller
{ {
public function actionIndex() public function actionIndex()
{ {
...@@ -13,15 +13,13 @@ class SiteController extends \yii\web\Controller ...@@ -13,15 +13,13 @@ class SiteController extends \yii\web\Controller
public function actionLogin() public function actionLogin()
{ {
$model = new LoginForm(); $model = new LoginForm();
if (isset($_POST[$model->formName()])) { if ($this->populate($_POST, $model) && $model->login()) {
$model->attributes = $_POST[$model->formName()]; Yii::$app->getResponse()->redirect(array('site/index'));
if ($model->login()) { } else {
Yii::$app->getResponse()->redirect(array('site/index')); echo $this->render('login', array(
} 'model' => $model,
));
} }
echo $this->render('login', array(
'model' => $model,
));
} }
public function actionLogout() public function actionLogout()
......
...@@ -42,7 +42,7 @@ class LoginForm extends Model ...@@ -42,7 +42,7 @@ class LoginForm extends Model
{ {
if ($this->validate()) { if ($this->validate()) {
$user = User::findByUsername($this->username); $user = User::findByUsername($this->username);
Yii::$app->getUser()->login($user); Yii::$app->getUser()->login($user, $this->rememberMe ? 3600*24*30 : 0);
return true; return true;
} else { } else {
return false; return false;
......
...@@ -303,6 +303,34 @@ class Controller extends Component ...@@ -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. * Renders a view and applies layout if available.
* *
* The view to be rendered can be specified in one of the following formats: * 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