2016-10-12 11 views
0

私はYii2 Advancedバージョンを使用しています。また、私は何の問題もないと思いますLoginControllerが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; 
} 

であり、ユーザがログインしようとすると、セッションが開かれ、サイトのページへの直接とき次のことは、次のとおりです。

この

はログインモデルです。ここ はsitecontrollerです:

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 \ベースの\ InvalidConfigException

予期しない構成タイプについて"テスト"コンポーネント:整数

どのように問題を解決するために、私はそのユーザーを取得しようとするtはすべてのデータを格納し、それは失敗するようですか?

main.php:PARAM値.. が、クラスのYii \ウェブ\アプリケーション(別名のYii :: $ APP-を設定するためにあなたはおそらく

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

を使用している

<?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, 
]; 
+0

を設定することができますを使用して簡単にPARAMアクセスすることができ、バックエンド/ configに – scaisEdge

+0

@scaisEdgeこんにちは、メインでごmain.phpを表示しますコードが追加されました。 – newbrant

+0

私は答えを掲示しました..あなたは – scaisEdge

答えて

0

> set)にはコンポーネントを登録するset()という名前の関数が含まれています(あなたのエラー: "test"コンポーネントの予期せぬコンフィグレーションタイプ:integer)この方法でコードはYii2によって誤解されます。コンポーネントIDはありませんが、あなたが

param.phpファイルを使用することができPARAM必要がある場合のparamのためのキー

はあなたの範囲のためのチェック

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

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

ため、このリファレンスを参照してください

必要なパラメータを返します

ファイルconfig/param.php

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

、あなたはこれが

\Yii::$app->params['test'], 

またはあなたは、単にランタイム

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

を返答していただきありがとうございます。問題を解決できない場合は、私はチュートリアルに従っていました。おそらく私は先生に直接連絡する必要があります。とにかく、最高の頼りに選ばれました。 – newbrant

関連する問題