Я только начал изучать Laravel и хотел бы узнать, возможно ли создать ресурс Route ::, который позволил бы мне получить доступ к указанному ниже URL-адресу с помощью методов RESTful:
Я хотел бы, чтобы URL выглядел так:
http://example.com/articles/2014/09/22/this-is-the-article-title
И я хотел бы получить доступ к этому из моего ArticlesController с помощью:
//GET articles/{year}/{month}/{day}/{title}
public function show($year, $month, $day, $title) {
$article = //find article in DB
return View::make('articles.show')->with('article', $article);
}
Из того, что я до сих пор собирал, это можно как-то сделать, выполнив что-то похожее на приведенное ниже в файле rout.php:
Route::resource('year.month.day.articles', 'ArticlesController');
Но это не совсем подходит мне.
У кого-нибудь есть предложения?
Контроллеры ресурсов полезны для создания контроллеров RESTful, которые образуют основу API. Общий синтаксис такой:
Route::resource('resourceName', 'ControllerName');
Это создаст семь разных маршрутов в один вызов, но на самом деле это просто удобный метод для этого:
Route::get('/resourceName', 'ControllerName@index');
Route::get('/resourceName/{resource}', 'ControllerName@show');
Route::get('/resourceName/create', 'ControllerName@create');
Route::get('/resourceName/{resource}/edit', 'ControllerName@edit');
Route::post('/resourceName', 'ControllerName@store');
Route::put('/resourceName/{resource}', 'ControllerName@update');
Route::delete('/resourceName/{resource}', 'ControllerName@destroy');
URL-адреса только основанный на имени ресурса, который вы указываете, и имена методов встроены. Я не знаю, каким образом вы можете изменить те, используя контроллеры ресурсов.
Если вы хотите красивые URL-адреса, назначьте эти маршруты без использования контроллера ресурсов:
Route::get('/articles/{year}/{month}/{day}/{title}', 'ArticlesController@show');
Обратите внимание, что если вы используете show
метод, это будет конфликтовать с любым REST-полным URL, который вы могли определить ранее ( show
Метод в контроллере ресурсов будет ожидать только 1 переданный параметр, а именно ID ресурса, который будет отображаться). По этой причине я бы рекомендовал вам изменить имя этого метода на другое.
Других решений пока нет …