2015-10-15 33 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' 
]; 

希望能解決您的問題,遲到比晚起更好