Yii2多个布局问题

时间:2016-10-28 09:12:54

标签: twitter-bootstrap url layout yii2

在我的yii2项目中,我使用了两种布局。

  • 登录
  • 主要布局。

登录布局

  • 用于登录页面和注册页面。

主要布局

  • 主要布局是一个引导仪表板主题。每当用户登录时,他都会被重定向到呈现主要布局的仪表板。

问题

  • 我有我的rbac设置。
  • 只有登录的用户才能访问信息中心网站。
  • 当用户在登录页面中并尝试添加一些不相关的URL并单击“输入”时。它会重定向到找不到的页面。
  • 找不到页面会显示信息中心网站,并允许用户访问所有网址
  • 由于角色已设置,因此会抛出错误。

当用户输入一些不相关的网址时,如何让我的网站不执行任何操作。例如像gmail。我输入了不相关的网址 https://mail.google.com/mail/#trashfafafagfafaff 它仍保留在垃圾页面中,但什么也没做。我试图对我无法执行的网站做同样的事情。

任何帮助都会很棒。谢谢!!!

1 个答案:

答案 0 :(得分:0)

因为,没有提供与布局相关的细节。所以,我从我这边假设的东西很少。希望你能理解。

<强> 假设

  • 使用Yii2-App-Basic
  • 登录前有两种不同的布局&amp;登录后。意思是,你知道资产。

目录结构

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

BeforeLoginAsset.php &amp; AfterLoginAsset.php 是您的应用程序的两种布局。登录前的一个&amp;分别登录后。 (您在问题中已经提到过Login&amp; Main Layout。)

假设您了解这些布局结构。 (如果不是,那么我将提供有关此部分的详细信息。)

<强>配置/ 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 ,可以扩展到应用程序中使用的所有控制器。

<?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']);
    }
  }


}

在公共控制器的 init()函数中声明条件,该函数将为扩展此公共控制器的每个控制器运行。

在这种情况下,如果用户没有登录,它将不会在登录页面之后进入。它会在登录页面之前将它们抛出。这取决于你如何实现它。与您分享只是一个想法。

希望它能帮助你。