2016-07-26 17 views
1

Stellen gibt es die folgende URL-Struktur:Laravel 4.2 weiterhin Routing

someurl.axyz/{post-slug} 
someurl.axyz/{page-slug} 

post-slug und page-slug sind in der einzigartigen Datenbanktabellenspalte gespeichert. Was ist die "eleganteste" Art, die Strecken mit Laravel 4.2 zu bewältigen (und wenn es einen Unterschied mit Laravel v5.2 gibt)?

Ich löste dies mithilfe von Bindungsparameter zu einem Modell. Der folgende Code befindet sich am Ende der Datei routes.php. Ich würde gerne wissen, ob es für diese Aufgabe eine einfachere Lösung gibt.

Route::bind('directslug', function($value, $route) { 
    $post = Post::where('slug', $value)->first(); 
    if ($post) { 
     return $post; 
    } 
    $page = Page::where('slug', $value)->first(); 
    if ($page) { 
     return $page; 
    } 

    throw new NotFoundHttpException; 
}); 
Route::get('{directslug}', function(Post $post) { 
    return $post; 
}); 
Route::get('{directslug}', function(Page $page) { 
    return $page; 
}); 

App::missing(function($exception) { 
    return Response::view('error.missing', array('title' => '404 Page not Found'), 404); 
}); 
+0

Für 4.2 müssen Sie den Parameter manuell binden, wie Sie es getan haben, und 5.2 bindet es aus der Box. – TheFallen

Antwort

0

Ich handle alles mit route model binding, ziemlich ähnlich wie Ihre Lösung.

Meiner Meinung nach sollten Sie für jede Route ein separates Modell aufbewahren, sonst könnten Sie mit einem Post mit derselben Seite auf einer Seite enden ... auch wenn Sie sicher sind, dass Sie sich darum gekümmert haben. Sie verwenden zwei verschiedene Routen nach dem Grund, warum sollten Sie immer Abfrage für einen Beitrag, wenn jemand nach einer Seite sucht?