漂亮的URL使用Laravel的Route :: resource RESTful方法

时间:2014-09-21 22:48:34

标签: php rest url laravel

我刚刚开始学习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');

但这对我来说并不合适。

有人有任何建议吗?

1 个答案:

答案 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)。因此我建议您将该方法的名称更改为其他名称。