在我的yii2项目中,我使用了两种布局。
登录布局
主要布局
问题
当用户输入一些不相关的网址时,如何让我的网站不执行任何操作。例如像gmail。我输入了不相关的网址 https://mail.google.com/mail/#trashfafafagfafaff 它仍保留在垃圾页面中,但什么也没做。我试图对我无法执行的网站做同样的事情。
任何帮助都会很棒。谢谢!!!
答案 0 :(得分:0)
因为,没有提供与布局相关的细节。所以,我从我这边假设的东西很少。希望你能理解。
<强> 假设 强>
目录结构
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()函数中声明条件,该函数将为扩展此公共控制器的每个控制器运行。
在这种情况下,如果用户没有登录,它将不会在登录页面之后进入。它会在登录页面之前将它们抛出。这取决于你如何实现它。与您分享只是一个想法。
希望它能帮助你。