Yii2。设置自定义控制器命名空间

时间:2016-07-15 17:51:01

标签: php yii yii2

我在components / test / test / controllers文件夹中有一个名为MyController的控制器。如果我将命名空间设置为“命名空间app \ components \ test \ test”,那么如果说“找不到页面”,我会尝试调用控制器。

我一直在阅读,我知道默认情况下Yii2将控制器的命名空间设置为“app \ controllers”。

还要知道您可以从config更改所有控制器的命名空间:

'controllerNamespace' => 'app\\components\test...'

但我只想换一个控制器而不是所有人。类似于模块的东西,你可以做:

$this->controllerNamespace = 'app\modules\test\test';

我刚发现有一种叫做“controllerMap”的东西,也许这可能是一个解决方案?任何想法?

示例 我在内部“组件”(基本模板)中创建了一个带有此内容的控制器LocationController:

namespace app\components;

use yii\web\Controller;

class LocationController extends Controller  {

    public function actionAdd() {

        return "hola1";
    }

    public function actionRemove() {
        return "hola2";
    }

}

当我创建链接时Yii :: $ app-> urlManager-> createAbsoluteUrl(“location / add”);然后点击它我发现“找不到页面”错误。

更新 我发现可以在classMap中添加类,但不知道在哪里放置它:

Yii::$classMap['app\components\LocationController'] = '..path.../components/LocaitonController.php'

也许这可以解决问题?

1 个答案:

答案 0 :(得分:0)

关于你的"未找到"问题,您的controllerNamespace和命名空间必须具有控制器的完整路径,在您的情况下:

app\modules\test\test\controllers

现在,要改变单个控制器的路径,我只能考虑在你的应用程序中创建一个模块(就像你提到的那样):

<?php

namespace app\modules\test\test;

/**
 * module definition class
 */
class Module extends \yii\base\Module
{
    /**
     * @inheritdoc
     */
    public $controllerNamespace = 'app\modules\test\test\controllers';

    /**
     * @inheritdoc
     */
    public function init()
    {
        parent::init();

        // custom initialization code goes here
    }
}

并在配置中添加模块:

$config = [
    ...
    'modules' => [
        'module' => 'app\modules\test\test\Module'
    ]
];

修改

您还可以添加配置:

$config = [
    ...
   'controllerMap' => [
       'location' => 'app\components\LocationController',
   ],
];