Laravel5 RouteServiceProvider无法正常工作

时间:2015-10-15 13:42:39

标签: php routes laravel-5 laravel-routing

你帮我解决了我的问题吗?我正在使用laravel5 App/Providers/RouteServiceProvider。我试图根据当前的lang添加到路由前缀。例如。: 我有routes.php,其中的路线如下:

/blog
/home

我需要这样做: 我的网址是例如:

/en/blog

我得到了#34; lang"来自网址,我想添加路由前缀,以匹配我的路由。所以它会做什么。像这样:

$router->group(['namespace' => $this->namespace, 'prefix' => $locale], function($router) {
            require app_path('Http/routes.php');
});

我不知道为什么,但它不起作用......如果网址是/en/blog,它与任何路线都不匹配,无论如何它应该...... 我也尝试更改命名空间,并在某些控制器方法中执行此操作:

die(print_r(Route::getCurrentRoute()));

但所有路线的名称空间为:App\Controllers

你有一个想法,为什么它不起作用?

在我看来,RouteServiceProvider没有加载,因为当我尝试输入方法map或方法boot die('smth');时,它没有做任何事情......

这是我的路线服务提供商:

<?php namespace App\Providers;

use Illuminate\Routing\Router;
use Illuminate\Http\Request;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

class RouteServiceProvider extends ServiceProvider {

    /**
     * This namespace is applied to the controller routes in your routes file.
     *
     * In addition, it is set as the URL generator's root namespace.
     *
     * @var string
     */
    protected $namespace = 'App\Http\Controllers';

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @param  \Illuminate\Routing\Router  $router
     * @return void
     */
    public function boot(Router $router)
    {
        parent::boot($router);

        //
    }

    /**
     * Define the routes for the application.
     *
     * @return void
     */
    public function map(Router $router, Request $request)
    {
        $locale = $request->segment(1);
        $this->app->setLocale($locale);

        $router->group(['namespace' => $this->namespace, 'prefix' => $locale], function($router) {
            require app_path('Http/routes.php');
        });
    }

}

1 个答案:

答案 0 :(得分:0)

嘿,我看到没有人回复你的问题,我不知道你是否已将此标记为已解决但基于我能说的内容:

  • 为了复制您的问题,我运行了php artisan route:cache

这意味着Laravel正在查看路由的存储缓存,而不是您更改的routes.php或路由服务提供商文件。

这意味着当我在RouteServiceProvider.php中更改地图功能时,不会发生任何事情

public function map(Router $router, Request $request)
{
    /*
    $locale = $request->segment(1);
    $this->app->setLocale($locale);

    $router->group(['namespace' => $this->namespace, 'prefix' => $locale], function($router) {
        require app_path('Http/routes.php');
    });
    */

}

您可能已经通过重新启动服务器解决了问题,但是,特定的供应商文件可能会为您缓存路由。

  • 因此,要清除缓存,只需运行php artisan route:clear
  • 即可

之后,您的RouteServiceProvider.php文件的所有更改都应立即生效。所以你可以访问/en但是为了强制你需要添加语言中间件的前缀。

搜索我认为你正在使用the laracast blogs multiple locales post

  • 因此,您仍需要使用php artisan make:middleware Language创建中间件并更改其handle()函数

之后只需将语言中间件添加到Kernel.php,以迫使Laravel将您转到/en

protected $middleware = [
    'App\Http\Middleware\Language'
];

希望能解决你的问题,迟到总比没有好。