【问题标题】:Yii2 change default Route to another namespaceYii2 将默认路由更改为另一个命名空间
【发布时间】:2018-08-25 22:17:44
【问题描述】:

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

composer require yiisoft/yii2

然后我创建自己的 index.php 并为应用设置配置

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

并且应用程序总是尝试在应用程序命名空间中本地化 defaultContoller。但是如果我将 SiteController 放在另一个命名空间中。它给了我 404 错误,

index.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();

web.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 命名空间 app/controllers 它可以工作,但是一旦我将它改回 repo/controllers 它说找不到页面。

【问题讨论】:

    标签: php yii2


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      yii\base\Application 对象有一个公共属性controllerNamespace,默认为app\\controllers,您需要根据控制器默认命名空间的变化进行相应的更改。

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

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

      默认路由是site(对于yii\web\Application),同样可以更改(defaultRoute属性):

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

      【讨论】:

      • 我在配置文件中添加了它,但仍然得到404。
      • @tyan 请显示应用程序配置、文件夹结构和控制器代码。
      • 我找到了问题,因为我需要定义根别名。
      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-21
        相关资源
        最近更新 更多