2016-01-25 61 views
1

Yii2中的默认路由为@ app/controllers/SiteController。 但如果我从头开始构建。Yii2将默认路由更改为另一个命名空间

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 

SiteController.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命名空间的应用程序/控制器它的工作原理,但一旦我将它改回到回购/控制器它说,找不到页面。

回答

1

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

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

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

缺省路由site(为yii\web\Application),它是可以改变的相同方式(defaultRoute属性):

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

我将其添加在配置文件中,但仍获得404 – tyan

+0

@tyan请出示应用程序配置,文件夹结构和控制器代码。 – arogachev

+0

更新问题@argoachev – tyan

2

试试这个你配置文件:

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

+0

stil无法正常工作。 – tyan

1

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

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

so如果我在配置中定义根别名@repo。然后它

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