2016-01-16 16 views
8

Potrzebuję wpisu 5.2 routes.php, który będzie przechwytywał cały ruch do określonej witryny domain.com/premium- witryny, dzięki czemu mogę zachęcić ludzi do zostania członków przed uzyskaniem dostępu do zawartości premium.Jak utworzyć trasę Catch-All w Laravel 5.2

Odpowiem na moje własne pytanie ~ i mam nadzieję, że ludzie będą mogli używać tych informacji.

Odpowiedz

2
  1. w APP/HTTP/routes.php utworzyć trasę, która będzie złapać cały ruch wewnątrz domain.com/premium-section/anywhere/they/try/to/go i próba znalezienia i wykonywania funkcji dopasowania w ramach PremiumSectionController
  2. Ale nie ma żadnych pasujących metod, tylko catch-all.

    Route::group(['as' => 'premium-section::', 
           'prefix' => 'premium-section', 
           'middleware' => ['web']], 
           function(){ 
           Route::any('', '[email protected]'); 
           Route::controller('/', 'PremiumSectionController'); 
    
           }); 
    

.

namespace App\Http\Controllers; 

    use ... 

    class PremiumSectionController extends Controller{ 

     public function premiumContentIndex(){ 
      return 'no extra parameters'; 
     } 

     //magically gets called by laravel 
     public function missingMethod($parameters = array()){ 
      return $parameters; 
     } 

    } 
+0

to jest odpowiedź? – lagbox

+0

ya, zadziałało to dla mnie. –

+0

, aby trasa przechwyciła "domain.com/premium-section/anywhere/they/try/to/go"? – lagbox

19

Można również złapać "wszystkie" za pomocą wyrażeń regularnych na parametrze.

Route::group(['prefix' => 'premium-section'], function() { 
    // other routes 
    ... 
    Route::get('{any}', function ($any) { 
     ... 
    })->where('any', '.*'); 
}); 

Można również przechwycić całą grupę, jeśli nie zdefiniowano żadnych tras z opcjonalnym parametrem.

Route::get('{any?}', function ($any = null) { 
    ... 
})->where('any', '.*'); 

Ten ostatni mógłby również złapać "domain.com/premium-section".

+1

Dziękuję za odpowiedź. Zastanawiam się, dlaczego Laravel nie jest zakodowany do pracy z prostą 'Route: any ('*')'! – PHPst