未找到Laravel命名空间路由

时间:2016-01-21 11:37:51

标签: php laravel routes

我有一个像这样的路线文件:

<?php

Route::group(['prefix' => 'project1', 'namespace' => '\App\Project1\Controllers'], function()
{

    Route::get('/', 'UsersController@index');
});

但是当我尝试访问dev.api/project1/时,它会抛出错误:

Class App\Http\Controllers\App\Project1\Controllers\UsersController does not exist

你可能会指出,很明显,你应该这样做:

Route::get('/', '\App\Project1\Controllers\UsersController@index');

但是,在没有首先实际使用它的情况下声明命名空间是不是没用?

无论如何,我应该怎样做才能在不预先添加名称空间的情况下调用控制器?感谢

1 个答案:

答案 0 :(得分:1)

默认情况下,app/Http/routes.php中的路由会自动加载到App\Http\Controllers命名空间内。在此文件中,您指定的任何命名空间都将相对于该父命名空间。

如果您想修改此行为,可以在app/Providers/RouteServiceProvider.php文件中完成。

一些快速选择:

  • 您可以通过修改protected $namespace属性来修改默认的父命名空间。

  • 您可以删除$router->group()方法中的初始map()来删除任何默认的父命名空间。

  • 您可以创建一个全新的app/Project1/routes.php文件,并将其加载到第二个路由器组中,并将App\Project1\Controllers作为该文件中列出的任何路由的默认父命名空间:

    public function map(Router $router)
    {
        $router->group(['namespace' => $this->namespace], function ($router)     {
            require app_path('Http/routes.php');
        });
        $router->group(['namespace' => 'App\Project1\Controllers'], function ($router)     {
            require app_path('Project1/routes.php');
        });
    }