我上周开始使用 Laravel 3,然后发现了新的 4 版本,我现在正在尝试转换。
我有十多个路由想要传递给特定的 Controller 方法。即“/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 Controller ,因为它们似乎不符合完整的 Restful 设计。即,网址中没有动词。
我已经写好了所有的处理,我只需要能够路由到它。 我需要能够通过 POST/api/v1/owners 或/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');
感谢您的帮助
最佳答案
您应该使用resourceful controllers因为它们是构建 API 时的宝贵 Assets 。您描述的端点可以使用资源 Controller 和嵌套资源 Controller 来实现。
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');
});
关于api - laravel 4 使用通配符的模式过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16945824/