2016-07-26 4 views
1

Представьте, что следующая структура URL:Laravel 4,2 продолжать маршрутизацию

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

post-slug и page-slug хранятся в уникальном столбце таблицы базы данных. Что такое «самый» элегантный способ обработки маршрутов с помощью Laravel 4.2 (и если есть разница с Laravel v5.2)?

Я решил это, используя параметр привязки к модели. Следующий код находится внизу файла routes.php. Я хотел бы знать, есть ли более простое решение для этой задачи.

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

Для 4.2 вам необходимо вручную привязать параметр, как вы это сделали, и 5.2 привязывает его из коробки. – TheFallen

ответ

0

Я обрабатываю все с помощью route model binding, в точности аналогично вашему решению.

На мой взгляд, вы должны хранить отдельную модель для каждого маршрута, иначе вы можете получить сообщение с тем же самым пучком страницы ... даже если я уверен, что вы позаботились об этом. Вы используете два разных маршрута после всего, почему вы должны всегда запрос на сообщение, если кто-то ищет страницу?