2

我上周开始使用 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 宁静控制器,因为它们似乎不符合完整的宁静设计。即,网址中没有动词。

我已经编写了所有处理,我只需要能够路由到它。我需要能够通过 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');

感谢您的任何帮助

4

2 回答 2

3

您应该使用资源丰富的控制器,因为它们是构建 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');
});
于 2013-06-06T00:21:23.087 回答
-1

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

于 2013-06-05T18:23:35.777 回答