命名空间路由在Laravel 5中不起作用

时间:2015-04-12 16:29:08

标签: php laravel routes laravel-5

我正在建立一个国际网站,因此我设法让网址看起来像/{language}/{other_stuff},感谢RouteServiceProvider中的某些操作

/**
 * Define the routes for the application.
 *
 * @param  \Illuminate\Routing\Router  $router
 * @return void
 */
public function map(Router $router, Request $request)
{

    $locale = $request->segment(1);
    $this->app->setLocale($locale);

    /**
     * Internationalization routing system
     */
    $router->group(['namespace' => $this->namespace, 'prefix' => $locale], function($router) use ($locale) {

        if ($locale == 'en') require app_path('Http/routes_en.php');
        elseif ($locale == 'el') require app_path('Http/routes_el.php');

    });

}

像魅力一样工作。每种语言都有自己的路径文件,这是一个选择。

假设我们转到/en/并且您是管理员,我在Http/route_en.php中创建了另一个命名空间,专注于管理部分:

Route::group(['namespace' => 'Admin', 'prefix' => 'admin'], function() {

  Route::controller('', 'DashboardController');

  Route::controller('brands', 'BrandsController');
  Route::controller('contents', 'ContentsController');
  Route::controller('downloads', 'DownloadsController');
  Route::controller('news', 'NewsController');
  Route::controller('products', 'ProductsController');
  Route::controller('settings', 'SettingsController');
  Route::controller('users', 'UsersController');

});

所以现在我应该轻松访问诸如/en/admin/brands之类的部分,但它失败了。由于HTML类

,我动态生成所有链接
{!! HTML::linkAction('Admin\BrandsController@getIndex', 'Brands') !!}

当我转到/en/admin时生成正常,这意味着此程序包检测到Admin\BrandsController@getIndex,但是当您点击它时

Sorry, the page you are looking for could not be found.

我测试了一些东西,当我只是在group()之外设置路线时,它运行正常。

Route::controller('admin/brands', 'Admin\BrandsController');

我在这里缺少什么? HTML类和路由系统不应该彼此一致吗?我犯了什么错误?也许有问题?

编辑:我打开了an issue for this problem on GitHub

1 个答案:

答案 0 :(得分:3)

所以没有人试图帮助我。

几天之后,一个问题和许多测试我自己理解了这个问题:你必须将DashboardController路由放在最后,否则路由系统将首先接受它并忽略其他路由。

  /**
   * Admin
   */
  Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'is.admin'], function() {

    Route::controller('news', 'NewsController');
    Route::controller('brands', 'BrandsController');
    Route::controller('products', 'ProductsController');
    Route::controller('users', 'UsersController');
    Route::controller('downloads', 'DownloadsController');
    Route::controller('settings', 'SettingsController');
    Route::controller('contents', 'ContentsController');

    Route::controller('', 'DashboardController');

  });

注意:路线列表中的一切似乎都没问题,甚至在HTML /表格包中也没问题,但事实并非如此。

我把它放在任何有类似问题的人身上。