如何更改yii2中的布局
我的应用程序中有一个产品模块,我在高级应用程序的后端和前端都注册了该模块,我想实现的是,如果用户从前端应用程序访问产品模块,我想呈现不同的布局,而不是/myproject/frontend/web/views/layouts/main.php,假设我想呈现/myproject/frontend/web/views/layouts/productLayout.php。如果管理员从后端应用程序访问产品模块,我想呈现/myproject/backend/web/views/layouts/main.php。在不更改代码的情况下,它在后端应用程序中使用/myproject/backend/web/views/layouts/main.php时工作得非常好,但在前端,它使用/myproject/frontend/web/views/layouts/main.php而不是/myproject/backend/web/views/layouts/productLayout.php时工作得不好。我在产品模块默认控制器的代码中尝试了这一点如何更改yii2中的布局,yii2,Yii2,我的应用程序中有一个产品模块,我在高级应用程序的后端和前端都注册了该模块,我想实现的是,如果用户从前端应用程序访问产品模块,我想呈现不同的布局,而不是/myproject/frontend/web/views/layouts/main.php,假设我想呈现/myproject/frontend/web/views/layouts/productLayout.php。如果管理员从后端应用程序访问产品模块,我想呈现/myproject/backend/web/views/layouts/main.p
public $productLayout = '@frontend/views/layouts/productLayout';
public function actionIndex()
{
$this->layout = $this->productLayout;
}
它在前端工作得很好,但当我尝试从后端访问时,它在加载前端布局文件时不起作用。。。
这方面的任何帮助都会很好,谢谢你可以测试应用程序id(并最终在config/main.php中用一个正确的唯一名称设置它)和设置你需要的布局
public function actionIndex()
{
if (Yii::$app->name == 'my_id_for_backend') {
$this->layout == '@backend/views/layouts/main';
} else {
$this->layout ='@frontend/views/layouts/productLayout';
}
}
您可以使用以下命令为控制器的所有操作设置:
public function beforeAction($action)
{
$this->layout = 'dashboard'; // or '@app/views/layouts/dashboard'
return true;
}
似乎您需要两种不同的布局取决于应用程序。。这就是你需要的吗?是的,我需要两种不同的布局,一种在前端应用程序中,取决于应用程序,另一种在后端应用程序中,取决于后端应用程序。我已经发布了一个带有建议的答案