2016-10-28 15 views
0

私のyii2プロジェクトでは、私は2つのレイアウトを使用しています。Yii2複数のレイアウトの問題

  • ログイン
  • メインのレイアウト。

ログインレイアウト

  • これは、ログインページおよびサインアップページです。

メインレイアウト

  • 主なレイアウトは、ブートストラップ、ダッシュボードのテーマです。ユーザーがログインすると、メインレイアウトを表示するダッシュボードにリダイレクトされます。

問題

  • 私は私のRBACを設定しています。
  • ログインしたユーザーだけがダッシュボードサイトにアクセスできます。
  • ユーザーがログインページにいて、無関係なURLを追加して[Enter]をクリックしようとしたとき。それは見つからないページにリダイレクトされます。
  • ページが見つからないため、ダッシュボードサイトがレンダリングされ、すべてのURLにユーザーがアクセスできるようになります。
  • ロールが設定されているため、エラーが発生します。

ユーザーが無関係のURLを入力した場合、どうすればいいですか。たとえば、gmailのようなものです。私は無関係のURLを入力しますhttps://mail.google.com/mail/#trashfafafagfafaffそれはゴミ箱のページに残りますが、何もしません。私は私が実行することができない私のサイトで同じことをしようとしています。

助けが素晴らしいでしょう。ありがとう!!!

+0

ログインレイアウトを定義しましたか? '$ this-> layout =" login ";' – Mohan

+0

はい私は定義しました.. Everythinはうまく動作しますが、手動でアドレスバーにテキストを入力すると、ページがダッシュボードサイトに見つからないようにリダイレクトされます –

+0

デフォルトルートを作成 – Mohan

答えて

0

レイアウトに関してはあまり詳しくは述べられていません。だから、私の側から推測していることはほとんどありません。あなたが理解することを願っています。ログイン後ログイン&前のためYii2アプリ-基本的な2種類のレイアウトを持つ

  • での作業

    仮定

    • 。あなたは資産を認識しています。

    ディレクトリ構造

    Root-Folder 
        - assets 
         -- BeforeLoginAsset.php 
         -- AfterLoginAsset.php 
        - commands 
        - components 
        - config 
         -- web.php 
        - controllers 
         -- MyController.php 
        . 
        . 
        . 
        . 
    

    BeforeLoginAsset.php & AfterLoginAsset.phpは、アプリケーションの2つのレイアウトです。それぞれログイン後のログイン&の前のもの。(あなたはすでにログインの&メインレイアウトとしてあなたの質問に言及しています)

    あなたはこれらのレイアウト構造を知っていると仮定します。 (ない場合は、その後、私は、このセクションに関する詳細でより多くの情報を提供しません。)

    のconfig /ここweb.php

    <?php 
    
    $params = require(__DIR__ . '/params.php'); 
    
    $config = [ 
        'id' => 'basic', 
        'basePath' => dirname(__DIR__), 
        'bootstrap' => ['log'], 
        'components' => [ 
        . 
        . 
    
        'assetManager' => [ 
         'class' => 'yii\web\AssetManager', 
        ], 
        ], 
        'on beforeRequest' => function ($event) { 
        Yii::$app->layout = Yii::$app->user->isGuest ? '@app/views/Mylayouts/beforeLogin.php' : '@app/views/Mylayouts/afterlogin.php' ; 
        }, 
    
        'timeZone'=>'', 
        'params' => $myParams, 
    ]; 
    
    if (YII_ENV_DEV) { 
    
    } 
    
    return $config; 
    

    'on beforeRequest'はあなたがそうであるようにレイアウトを決定する重要な役割を果たしますすでにそれをやっている。

    MyController.phpが作成されており、アプリケーションで使用されているすべてのコントローラに拡張できます。各このコモンコントローラーを拡張し、すべてのコントローラのために実行されますあなたの共通のコントローラののinit()機能で

    <?php 
    namespace app\controllers; 
    
    use Yii; 
    use yii\web\Controller; 
    
    class MyController extends Controller 
    { 
    
        public function init() { 
        if(!Yii::$app->user->isGuest) { 
         return $this->redirect(['/dashboard']); 
        } else { 
         return $this->redirect(['/login']); 
        } 
        } 
    
    
    } 
    

    宣言条件。

    この場合、ユーザーがログインしていない場合、ログインページの後には移動しません。ログインページの前にスローされます。どのように実装するかはあなた次第です。あなたと共有するのは単なるアイデアです。

    希望はあなたを助けます。

  • +0

    私はonbeforerequestのことを知らなかった、私は実際に私のコントローラのログイン方法でレイアウトを使用していたのですが、それは私の問題であるメインレイアウトに見つからないページにリダイレクトするURLの隣にいくつかの無関係のコンテンツを入力します。これは役に立ちます.. –

    +0

    @MohanPrasad:それを実装し、私に返答してください。あなたのコードが正常に動作しているのを見てうれしいです。インドからのご挨拶* Happy Diwali * –

    +0

    エラーページにはまだログインしていないのに同じダッシュボードレイアウトが表示されています..私はすべてのエラーページに対して別のレイアウトを設計した代替案を見つけました。あまりにも:-) –