我上周开始使用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');
感谢您的帮助
答案 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/*',
(注意星号前的斜线),如示例所示。