我刚刚开始学习Laravel,并想知道是否可以创建一个Route ::资源,允许我使用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);
}
从目前为止我收集到的内容,可以通过在routes.php文件中执行类似下面的操作来实现:
Route::resource('year.month.day.articles', 'ArticlesController');
但这对我来说并不合适。
有人有任何建议吗?
答案 0 :(得分:3)
资源控制器对于构建构成API主干的RESTful控制器非常有用。一般语法如下:
Route::resource('resourceName', 'ControllerName');
这将在一次调用中创建seven different routes,但这实际上只是一种方便的方法:
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。
如果你想要漂亮的URL,那么在不使用资源控制器的情况下分配这些路由:
Route::get('/articles/{year}/{month}/{day}/{title}', 'ArticlesController@show');
请注意,如果您使用show
方法,这将与您之前定义的任何REST-ful URL冲突(资源控制器中的show
方法只会期望传递1个参数in,即要显示的资源的ID)。因此我建议您将该方法的名称更改为其他名称。