2016-05-18 91 views
3

我在Laravel 5.2中建立了一個項目,它有一個很大的(很大的行數)routes.php。爲了讓路線更清潔一些,我將所有路線組分成了介紹分開的文件。在app\Http\Routes\在自定義路由文件上的Laravel路由緩存

我需要RouteServiceProvider中的所有文件(修正:工作..)完全適合我。畢竟,我想用php artisan route:cache緩存路線。那麼如果你去了一個頁面,你會得到一個404錯誤。

「長」的故事短:新的路線邏輯崩潰後工匠路線緩存。

這在RouteServiceProvider我的地圖功能(通過this答案的啓發):

public function map(Router $router) 
{ 
    $router->group(['namespace' => $this->namespace], function ($router) { 
     // Dynamically include all files in the routes directory 
     foreach (new \DirectoryIterator(app_path('Http/Routes')) as $file) 
     { 
      if (!$file->isDot() && !$file->isDir() && $file->getFilename() != '.gitignore') 
      { 
       require_once app_path('Http/Routes').DS.$file->getFilename(); 
      } 
     } 
    }); 
} 

是否有人知道問題是什麼?或者我只需要將所有內容都放回到routes.php中,如果我想使用路由緩存。提前致謝。

回答

3

TL; DR:使用require而不是require_once,你應該沒問題。

因此,對於初學者,讓我們來看看Illuminate\Foundation\Console\RouteCacheCommand
您會注意到它使用getFreshApplicationRoutes方法,該方法引導應用程序並從路由器獲取路由。

我用這個代碼創建一個命令會做路由計數:

$app = require $this->laravel->bootstrapPath().'/app.php'; 

$app->make('Illuminate\Contracts\Console\Kernel')->bootstrap(); 

$routesCnt = $app['router']->getRoutes()->count(); 

$this->info($routesCnt); 

這讓我們有更多的瞭解有多少路線被取出。

使用您的代碼,無論我在Http\Routes文件夾中添加了多少個文件,它們都沒有被註冊。 所以我決定嘗試使用「require」而不是「require_once」。 瞧!

路線數量適當增加。至於爲什麼會發生這種情況,我猜這是因爲作曲家自動加載(這只是一個受教育的猜測)。 看看composer.json:

"psr-4": { 
     "App\\": "app/" 
    } 

這意味着,在應用程序/文件夾中的文件是自動加載。這意味着這些文件已經被加載,只是不在你想要的地方。 這意味着如果您使用*_once包含函數,它們將不會再次加載。

守則RouteServiceProvider.php,方法map爲我工作是:

$router->group(['namespace' => $this->namespace], function ($router) { 
     // Dynamically include all files in the routes directory 
     foreach (new \DirectoryIterator(app_path('Http/Routes')) as $file) 
     { 
      $path = app_path('Http/Routes').DIRECTORY_SEPARATOR.$file->getFilename(); 
      if ($file->isDot() || $file->isDir() || $file->getFilename() == '.gitignore') 
       continue; 

      require $path; 
      $included[] = $path; 
     } 
    }); 
+0

長,沒有閱讀)。但它工作,歡呼! –