2013-02-14 8 views
5

Ich versuche, einen Platzhalter von URL zu erfassen und dann zuerst an einen Filter dann an den Controller zu leiten. Ich bin nicht sicher, wie man die Frage genau plant, aber hier ist, was ich bisher versucht habe.Laravel, Routing Wildcards zu filtern und dann Controller

Route::get('test/(:any?)', array('as' => 'testroute', 'uses' => '[email protected]', 'before' => "test_filter:$1")); 

Route::filter('test_filter', function($id = NULL) 
{ 
    if($id) 
    echo "This id is " . $id; // Prints "This id is $1" 
}); 

und

Route::get('test/(:any?)', array('as' => 'testroute', function($id = NULL) 
{ 
    if($id) 
     echo "this id is " . $id; // Does not do anything 
}, 'uses' => '[email protected]')); 

Grundsätzlich möchte ich überprüfen, ob es eine ID an die URL und setzen ein Cookie angehängt ist, wenn es einen gibt. Aber unabhängig von dem Fall möchte ich, dass diese Route von einem Controller behandelt wird, egal ob eine ID angehängt ist oder nicht.

Ich muss das Gleiche mit so vielen Routen tun, also würde ich eher etwas wie einen Filter bevorzugen, anstatt die Codes des Controllers zu modifizieren.

Ich weiß, dass ich das Wildcard-Element direkt an eine Schließung übergeben kann, oder ich kann dies als einen Parameter an jeden Controller füttern, aber in diesem Fall muss ich die Controller-Codes ändern, die ich nicht an der Moment.

Kann ich es durch Filter tun? oder auf eine andere Art und Weise, in der ich die Controller-Codes nicht ändern muss?

Antwort

0

Versuchen Sie einen anonymen direkt nach dem vor von here

+0

@Gufran Ich habe meinen Code aktualisiert – afarazit

+0

Nein, die anonyme Funktion macht nichts. Es wendet nur den Filter an und leitet dann die Route zum Controller weiter. Außerdem muss ich den Wert des Platzhalters innerhalb des Filters oder des anonymen Verschlusses ergreifen. – Gufran

+0

@Gufran aktualisiert den Code erneut, übergibt das Match an die Anon-Funktion, sehen, ob das funktioniert – afarazit

0

Genommen

Route::get('test/(:any?)', 
    array(
     'as' => 'testroute', 
     'uses' => '[email protected]', 
     'before' => "test_filter", 
     function($my_cookie_value) 
     { 
      // Set cookie here 
     } 
    ) 
); 

geben ich eine Middleware verwenden würde http://laravel.com/docs/5.1/middleware (oder Filter für ältere Laravel Versionen) und fügen Sie die Route/s in eine Gruppe Das hat die Middleware, wie Sie hier sehen können http://laravel.com/docs/5.1/routing#route-group-middleware.

Die Middleware wird vor dem Routencode ausgeführt, wo Sie eine Logik zur Verwaltung Ihres Cookies hinzufügen können.

+0

Danke. Sehr geschätzt, aber diese Frage ist 2,5 Jahre alt. In der Regel wird das Datum der Veröffentlichung unter der Frage angezeigt. Versuchen Sie daher, das Datum beim nächsten Mal zu überprüfen. – Gufran