2016-04-06 7 views
9

"基本"アプリケーションテンプレートを使用して、メインサイトのログインとは別のモジュールログインを設定する正しい方法は何ですか?Yii2 - 基本アプリケーションテンプレートのモジュールログイン

たとえば、ログインが必要な「admin」モジュールがあります。私はまた、メインサイトのユーザーログインが必要です。

私は次のことを行っている:

このフォルダ内 LoginForm.phpUser.phpを置き adminモジュールフォルダ
  • modelsフォルダを作成しgiiツール
  • を使用してadminモジュールを作成し
    1. (も中に名前空間宣言を更新これらのファイル)
    2. AccessControlの動作とログイン/ログアウトアクションをに追加しました
    3. 更新config\web.phpは、次のように:

      'modules' => [ 
          'admin' => [ 
           'class' => 'app\modules\admin\Module', 
          ], 
      ], 
      
    4. 更新app\modules\admin\Module.php次のように:

      public function init() 
      { 
          parent::init(); 
      
          Yii::$app->set('user', [ 
           'class' => 'yii\web\User', 
           'identityClass' => 'app\modules\admin\models\User', 
           'enableAutoLogin' => true, 
           'loginUrl' => ['admin/default/login'], 
          ]); 
      
          Yii::$app->set('session', [ 
           'class' => 'yii\web\Session', 
           'name' => '_adminSessionId', 
          ]); 
      } 
      

    私が午前の問題は、私はときに私の管理ページにアクセスしようとした場合ログインしていない場合は、ログインフォームが表示されます(これは正しい)。しかし、ログインすると、メインのサイトにリダイレクトされます。それは私がアクセスしようとしていた管理ページに私をリダイレクトする必要があります。 DefaultController.php

    、それは以下の(デフォルトコード)を持つ:

    if ($model->load(Yii::$app->request->post()) && $model->login()) 
        return $this->goBack(); 
    

    これを行うための正しい方法は、私が管理モジュール用とメインサイトのための独立したログインを持つことができるとは何ですか?私はいくつかの不必要な複雑さを追加するように "高度なアプリケーションテンプレート"を使用したくないです。

  • +0

    スイッチは、このために作られた、高度なものに基本的なアプリケーションを変換するために非常に簡単です。後でYiiの良い人に感謝します。 –

    答えて

    0

    goBack()は、ユーザのreturnUrlが設定されていない場合、デフォルトでhomeUrlになります。

    なぜリダイレクトしないのですか?

    if ($model->load(Yii::$app->request->post()) && $model->login()) 
        return $this->redirect(['myadminmodule']); 
    
    +0

    これは常に固定ページにリダイレクトされます。ユーザーがアクセスしようとしたページ(ログインしていない場合)にリダイレクトする必要があります。 – GSTAR

    +0

    ユーザーが管理ログインページにアクセスした場合は、返信URLを設定できます。 'Yii :: $ app-> user-> returnUrl = Yii :: $ app-> request-> referrer;' リファラーが外部サイトにリダイレクトされないようにいくつかのチェックを追加します。 – Alex

    0

    ユーザーコンポーネントは、あなたがにreturnurlを設定することができ、ゲッターは、次のように説明しThis method reads the return URL from the session. It is usually used by the login action which may call this method to redirect the browser to where it goes after successful authentication.

    を推奨:データを処理する前に、(これは、ユーザーがしたページを保存しますYii::$app->user->setReturnUrl(Url::current());を呼び出すことによってにreturnurlを設定しますさらに、セッションに渡す前にUrl::current()を使用してGETパラメータを操作して、フレームワークに魔法をかけさせることができます。

    推奨しない:データを処理した後、あなたはリファラーに頼ることができます(いくつかのケースでは動作しませんどの) return Yii::$app->request->referrer ? $this->redirect(Yii::$app->request->referrer) : $this->goHome();または代わりのGOHOME以下の基本的APP-するリダイレクトするよう>の間に設定することができhomeUrlをモジュールの初期化は、$this->redirect('your/admin/index');

    モジュールの初期化時に設定することをお勧めします。他の機能にも必要な場合がありますが、Yii2ではリダイレクトの「フォールバック」として使用します。

    0

    のconfig/web.phpに移動し、部品DefaultController.phpで

    'backendUrlManager'=>[ 
         'class' => 'yii\web\urlManager', 
         'enablePrettyUrl'=>true, 
         'showScriptName'=>false, 
         'baseUrl'=>'/admin', 
        ], 
    

    に追加し、それは以下の(デフォルトコード)を持つ:

    if ($model->load(Yii::$app->request->post()) && $model->login()) 
    

    リターンのYii :: $ app-> getResponse() - >リダイレクト(Yii :: $ app-> backendUrlManager-> baseUrl);

    0

    管理者モジュールに新しいコントローラを作成することをお勧めします。管理者モジュールにはログイン、ログアウトアクションが必要です。 将来、余分なロジックが追加される可能性があるためです。

    このログインアクションでは、同じLoginFormを使用できます。

    このログインアクションでは、リダイレクトURLを指定できます。

    管理モジュールクラス缶は、次のようになります。高度なアプリケーションに

    namespace app\modules\admin; 
    
    class Module extends \yii\base\Module 
    { 
        public $layout = 'main'; 
    
        public $defaultRoute = 'main/index'; 
    
        public function init() 
        { 
         parent::init(); 
    
         Yii::$app->errorHandler->errorAction = '/admin/main/error'; 
         Yii::$app->user->loginUrl = '/admin/main/login'; 
         ..... 
    
        } 
    }