我上周开始使用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控制器,因为它们似乎不符合完整的restful设计。例如,url中没有动词。
我已经写好了所有的处理,我只需要能够路由到它。我需要能够通过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');
感谢您的帮助
您应该利用资源丰富的控制器,因为它们是构建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');
});
我自己没有使用Laravel,但尝试any('api/v1/owners/*',
(注意星号之前的斜杠),如在示例中