2015-10-15 56 views
3

你能帮我解决我的问题吗?我正在与laravel5 App/Providers/RouteServiceProvider合作。我试图添加到路由前缀依赖于当前的郎。例如: 我有routes.php文件,到哪里都是一样的路线:Laravel5 RouteServiceProvider不能正常工作

/blog 
/home 

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

/en/blog 

我从URL获得 “郎”我想添加路由前缀,以匹配我的路线。所以它会做水平。像这样:

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

我不知道为什么,但它不工作...如果url为/en/blog,它没有匹配任何路线,反正它应该... 我也试过更改命名空间和一些控制方法做到这一点:

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

,但命名空间的所有路由是:App\Controllers

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

在我看来,RouteServiceProvider没有加载,也因为,当我试图把在法map或方法bootdie('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'); 
     }); 
    } 

} 

回答

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创建一个中间件,并改变其手柄()函数

后,只是在语言添加中间件到Kernel.php以迫使Laravel将您路由到/en

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

希望能解决您的问题,迟到比晚起更好