我的应用程序中有一个产品模块,我在我的高级应用程序的后端和前端注册,我希望实现如果用户从前端应用程序访问产品模块我想渲染不同的布局而不是/ 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。我在产品模块默认控制器
中的代码中尝试了这个public $productLayout = '@frontend/views/layouts/productLayout';
public function actionIndex()
{
$this->layout = $this->productLayout;
}
并且它在前端工作得很好但是当我尝试从后端访问它时它不会工作,因为它加载了前端布局文件... 任何有关这方面的帮助都将是非常感谢
答案 0 :(得分:1)
您可以测试应用程序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';
}
}
答案 1 :(得分:0)
您可以使用以下命令将其设置为控制器的所有操作:
public function beforeAction($action)
{
$this->layout = 'dashboard'; // or '@app/views/layouts/dashboard'
}