Yii2 将默认路由更改为另一个命名空间


Yii2 change default Route to another namespace

Yii2 中的默认路由是 @app/controllers/SiteController。但是如果我从头开始构建。

composer require yiisoft/yii2

然后我创建自己的索引.php并为应用程序设置配置

(new yii'web'Application($config))->run();

并且应用程序始终尝试在应用程序命名空间中本地默认的Contoller。 但是如果我把站点控制器放在另一个命名空间中。 它给了我 404 错误,

索引.php

require(__DIR__ . '/vendor/autoload.php');
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
$config = require(__DIR__ . '/repo/config/web.php');
(new yii'web'Application($config))->run();

网络.php

  'id' => 'repo', 
  'basePath' => dirname(__DIR__),  
  'controllerNamespace' => 'repo''controllers', 
  'defaultRoute' => 'site/index',  

文件夹结构

/vendor
-yiisoft
/repo
-config
---web.php
-controllers
---SiteController.php

站点控制器.php

<?php
namespace repo'controllers;
use Yii;
use yii'web'Controller;
class SiteController extends Controller{
  public function actionIndex(){
    echo 'welcome to the site';
  }
}
?>

如果我给 SiteController.php命名空间应用程序/控制器它可以工作,但是一旦我将其更改回存储库/控制器,它就会说找不到页面。

在你的配置文件中试试这个:

'controllerNamespace' => 'newnamespace'controllers',
'defaultRoute' => 'new/index',

yii''base''Application 对象有一个公共属性 controllerNamespace,默认为 app''controllers ,需要相应地更改它来更改默认的控制器命名空间。

将此添加到您的应用程序配置中:

[
    ...
    'controllerNamespace' => 'app''other''namespace'controllers',
    ...
],

默认路由是site(对于 yii''web''Application),可以用相同的方式更改它(defaultRoute 属性):

[
    ...
    'defaultRoute' => 'otherDefaultRoute',
    ...
],

我发现我忘了定义根别名。

// $className is a fully qualified class name without the leading backslash
$classFile = Yii::getAlias('@' . str_replace('''', '/', $className) . '.php');

所以如果我在配置中定义根别名@repo。 然后它可以工作

  'aliases' => [
    '@repo' => dirname(__DIR__),
  ],