【问题标题】:Yii2: Cannot process to get SessionYii2:无法处理以获取会话
【发布时间】:2016-10-12 19:52:21
【问题描述】:

我使用的是 Yii2 高级版。

这是登录模型:

namespace common\models;
use Yii;
use yii\base\Model;
use common\models\User;

class LoginForm extends Model{  
    public $username;
    public $password;
    public $rememberMe = true;
    public $verifyCode;

    const BACKEND_TEST = 'none';
    const BACKEND_ID = 'test';
    const BACKEND_USERNAME = 'backend_username';

    private $user;

    public function rules(){
        return [            [['username','password'],'required','message'=>'{attribute}required...'],
['username','validateUser'],          ['verifyCode','captcha','captchaAction'=>'login/captcha','message'=>'Wrong'],
            ];
    }

    public function validateUser($attribute,$params){
        $user = User::findOne(['username'=>$this->username]);
        if(!$user || (md5($this->password) != $user['password'])){
            $this->addError('password','Wrong>_<...');
        }else{
        $this->user = $user;
        }
    }

    public function login(){
        if(!$this->user){
            return false;
        }
        var_dump($this->userInfo());
        $this->createSession();
        return true;

    }

    private function createSession(){
        //Yii::$app->session->open();
        Yii::$app->set(self::BACKEND_ID,$this->user['id']);
        Yii::$app->set(self::BACKEND_USERNAME,$this->user['username']);

    }
public function userInfo(){
    return $this->user;
}

另外,还有我认为没有问题的 LoginController,接下来是当用户尝试登录时,会话将被打开,并直接到站点页面。 这是站点控制器:

namespace backend\controllers;

use Yii;
use yii\web\Controller;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
use common\models\LoginForm;

/**
 * Site controller
 */
class SiteController extends Controller
{

    public function actionIndex()
    {
        //var_dump(Yii::$app->session->get(common\models\LoginForm::BACKEND_ID));
        var_dump(LoginForm::userInfo());
        return $this->renderPartial('index');
    }

每次我尝试登录时都会出现错误消息并提供:

无效配置 – yii\base\InvalidConfigException

“测试”组件的意外配置类型:整数

如何解决问题,我尝试获取存储所有数据的 $user 似乎失败了?

main.php:

<?php
$params = array_merge(
    require(__DIR__ . '/../../common/config/params.php'),
    require(__DIR__ . '/../../common/config/params-local.php'),
    require(__DIR__ . '/params.php'),
    require(__DIR__ . '/params-local.php')
);

return [
    'id' => 'app-backend',
    'basePath' => dirname(__DIR__),
    'controllerNamespace' => 'backend\controllers',
    'bootstrap' => ['log'],
    'modules' => ['smister' => [
            'class' => 'backend\modules\smister\smister',
        ],],
    'components' => [
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        /*
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
            ],
        ],
        */
    ],
    'params' => $params,
];

【问题讨论】:

  • 在后端/配置中显示你的 main.php
  • @scaisEdge 您好,主要代码已添加。
  • 我已经发布了一个答案.. 希望是你正在寻找的东西

标签: php yii yii2


【解决方案1】:

你正在使用

 Yii::$app->set(self::BACKEND_ID,$this->user['id']);  

可能用于设置参数值.. 但是类 yii\web\Application (别名 Yii::$app->set )包含一个名为 set() 的函数,该函数注册组件..(所以你的错误:“测试”组件的意外配置类型:整数)在这个Yii2 误解了您的代码,因为您的成本 BACKEND_ID = 'test';不是组件 id 而是参数的键

查看此参考资料进行检查

http://www.yiiframework.com/doc-2.0/yii-web-application.html

http://www.yiiframework.com/doc-2.0/yii-di-servicelocator.html#set()-detail

如果你需要参数,你可以使用文件 param.php

返回你需要的参数

文件配置/param.php

<?php
   return [
     'test' => 'my_initial_value',
];

您可以使用

访问此参数
 \Yii::$app->params['test'], 

或者你可以简单地设置运行时间

  \Yii::$app->params['test'] = 'Your_value';

【讨论】:

  • 感谢回复,但无法解决问题,我正在学习教程,可能需要直接联系那位老师。无论如何,被选为最佳依赖。
猜你喜欢
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多