Php Yii2:如何在请求中更改controllerNamespace

Php Yii2:如何在请求中更改controllerNamespace,php,yii2,Php,Yii2,我正在尝试更改我的Yii::$app->controllerNamespace,如果controller类不存在 我扩展了UrlRule,并进行了一些检查,如果没有这样的类,switchcontrollerNamespace namespace libs\core; use Yii; use yii\web\UrlRule; class Gateway extends UrlRule { public function parseRequest($manager, $request)

我正在尝试更改我的
Yii::$app->controllerNamespace
,如果controller类不存在

我扩展了UrlRule,并进行了一些检查,如果没有这样的类,switch
controllerNamespace

namespace libs\core;

use Yii;
use yii\web\UrlRule;

class Gateway extends UrlRule
{
    public function parseRequest($manager, $request)
    {
        $return = parent::parseRequest($manager, $request);
        if($return) {
            $className = strstr(ltrim($return[0], '/'), '/', true);
            $params = Yii::$app->params;

            if(class_exists($params['controllerNamespace'] . '\\' . ucfirst($className) . 'Controller')) {
                Yii::$app->controllerNamespace = $params['controllerNamespace'];
            } else {
                Yii::$app->controllerNamespace = 'libs\\controllers';
            }
        }
        return $return;
    }
}
此方法正在主请求中工作:)

但是当我使用
Yii:$app->runAction()
时,什么也没有发生:(

谢谢


另外,请告诉我是否有更好的方法让multiply
controllerNamesapce
?(不使用模块)

为什么不简单地处理错误?为什么要这样做?您可以通过配置中的控制器映射来实现。