1

我想在我的 Yii2 项目中添加一个公共控制器目录。

在我的frontend/config/main.php我有这个:

'controllerNamespace' => 'frontend\controllers',

我实际上希望能够做这样的事情:

'controllerNamespace' => ['frontend\controllers', 'common\controllers'],

但这不是这样做的正确方法。它抛出一个ArrayToStringConversionException.

我正在使用 Yii 2 的 alpha 版本中的高级模板。这里有一个通用模型目录(在 common/models 下),我希望有一个类似的用于控制器和视图的通用目录(例如,在 common/controllers 和共同/观点)。

有任何想法吗?谢谢。

4

2 回答 2

0

我将控制器目录从“前端”更改为“应用程序”,并添加了下一个配置,例如'controllerNamespace'and 'controllerPath'

对于模型路径,我添加了类似Yii::setAlias('application', your/path/ . '/application'); “应用程序”的别名 - 它是您的模型所在目录的名称。

于 2014-02-06T08:48:50.060 回答
0

一种(显而易见的、简单的)解决方案可能是将控制器放在 common/controllers 中,然后在应用程序控制器文件夹中扩展类,没有任何内容。

所以可能有一个控制器common/controllers/ExampleController

namespace common\controllers;

class ExampleController extends yii\web\Controller {

    public function actionIndex() {...}
    public function actionView() {...}
    public function actionCreate() {...}
    public function actionUpdate() {...}
    public function actionDelete() {...}
    ...

}

派生类在frontend/controllers/ExampleController

namespace frontend\controllers;

class ExampleController extends \common\controllers\ExampleController {
    // empty class
}

注意:该controllerNamespace设置不再需要更改。

另一种类似的方法是在 frontend/controllers 文件夹中有一个符号链接,该链接指向 common/controllers 中的类。但我不确定这是否会出现问题(符号链接可能是版本控制系统中的问题,当它们在运行时得到解决时可能会导致错误......)。

如果您还想在公共部分(common/views/example)中拥有视图,您可以在扩展类中覆盖getViewPath()更改将搜索视图文件的位置。

namespace frontend\controllers;

class ExampleController extends \common\controllers\ExampleController {
    public function getViewPath() {
        return '@common/views/example';
    }
}

注意:要更改使用的布局文件,您可以使用Controller::$layout.

于 2016-12-06T08:20:12.857 回答