Browse Source

Added Controller::populate().

tags/2.0.0-beta
Qiang Xue 12 years ago
parent
commit
06fa0259b5
  1. 12
      app/protected/controllers/SiteController.php
  2. 2
      app/protected/models/LoginForm.php
  3. 28
      framework/base/Controller.php

12
app/protected/controllers/SiteController.php

@ -1,9 +1,9 @@
<?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,16 +13,14 @@ 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()];
if ($model->login()) {
Yii::$app->getResponse()->redirect(array('site/index')); Yii::$app->getResponse()->redirect(array('site/index'));
} } else {
}
echo $this->render('login', array( echo $this->render('login', array(
'model' => $model, 'model' => $model,
)); ));
} }
}
public function actionLogout() public function actionLogout()
{ {

2
app/protected/models/LoginForm.php

@ -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;

28
framework/base/Controller.php

@ -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:

Loading…
Cancel
Save