如何更改yii2中的布局

如何更改yii2中的布局,yii2,Yii2,我的应用程序中有一个产品模块,我在高级应用程序的后端和前端都注册了该模块,我想实现的是,如果用户从前端应用程序访问产品模块,我想呈现不同的布局,而不是/myproject/frontend/web/views/layouts/main.php,假设我想呈现/myproject/frontend/web/views/layouts/productLayout.php。如果管理员从后端应用程序访问产品模块,我想呈现/myproject/backend/web/views/layouts/main.p

我的应用程序中有一个产品模块,我在高级应用程序的后端和前端都注册了该模块,我想实现的是,如果用户从前端应用程序访问产品模块,我想呈现不同的布局,而不是/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;
}   
它在前端工作得很好,但当我尝试从后端访问时,它在加载前端布局文件时不起作用。。。
这方面的任何帮助都会很好,谢谢你可以测试应用程序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;
}

似乎您需要两种不同的布局取决于应用程序。。这就是你需要的吗?是的,我需要两种不同的布局,一种在前端应用程序中,取决于应用程序,另一种在后端应用程序中,取决于后端应用程序。我已经发布了一个带有建议的答案