我在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'
也许这可以解决问题?
答案 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',
],
];