使用通配符的laravel 4模式过滤器

时间:2013-06-05 17:04:07

标签: api rest wildcard routes laravel-4

我上周开始使用Laravel 3,然后找到了新的4版本,我现在正在尝试转换。

我想要提供给特定控制器方法的十几条路线。即“/ api / v1 / owners / 3 / dogs / 1或/ api / v1 / owners / 3”运行“myresourcecontroller @ processRequest”

在Laravel 3中,我能够使用它:(注意*通配符)

Route::any('api/v1/owners*', 'owners@processRequest'); // Process tags resource endpoints

我从文档中找到了这个例子,但它给了我一个错误。我得到一个NotFoundHttpException。

//[Pattern Based Filters](http://laravel.com/docs/routing#route-filters)
Route::filter('admin', function()
{
    //
});
Route::when('admin/*', 'admin');

不确定我做错了什么?还有另一种方法吗?

我不想使用Laravel 4 restful控制器,因为它们似乎不符合完全宁静的设计。即,网址中没有动词。

我已完成所有处理,我只需要能够路由到它。 我需要能够通过POST / api / v1 / owner或/ api / v1 / owners / 3 / dogs创建新记录 我不能使用/ api / v1 / owners / create。

我试图避免为每个端点编写路由,即

Route::any('api/v1/owners/{owner_id}', 'owners@processRequest');
Route::any('api/v1/owners/{owner_id}/dogs/{dog_id}', 'owners@processRequest');

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

您应该使用resourceful controllers,因为它们在构建API时非常有用。您描述的端点可以使用资源控制器和嵌套资源控制器来实现。

Route::resource('owners', 'OwnersController');
Route::resource('owners.dogs', 'OwnersDogsController');

允许您使用POST localhost/owners创建拥有者,并使用POST localhost/owners/3/dogs为拥有者创建一条狗。

然后,您可以将这些路由包装在路由组中以获取api/v1前缀。

Route::group(['prefix' => 'api/v1'], function()
{
    Route::resource('owners', 'OwnersController');
    Route::resource('owners.dogs', 'OwnersDogsController');
});

答案 1 :(得分:-1)

我自己没有使用过Laravel,但请尝试any('api/v1/owners/*',(注意星号前的斜线),如示例所示。