【问题标题】:laravel 4 pattern filter using a wildcardlaravel 4 模式过滤器使用通配符
【发布时间】:2013-06-01 12:01:50
【问题描述】:

我上周开始使用 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 设计。即,网址中没有动词。

我的所有处理都写好了,我只需要能够路由到它。 我需要能够通过 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 rest wildcard routes laravel-4


    【解决方案1】:

    您应该使用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');
    });
    

    【讨论】:

    • 太棒了。谢谢杰森。这有帮助。我将第一行更改为 array('prefix' => 'api/v1')。
    • 是的,我使用的是 PHP 5.4 语法。 :)
    • 当我对 /api/v1/owners/1/dogs/2 进行 POST 时收到此错误 (MethodNotAllowedHttpException)
    • 啊哈,我发现了问题。在 http 协议中拒绝带有子集合 id 的 POST 是合适的。我将其更改为 /api/v1/owners/1/dogs 我们将使用带有子集合 id 的 PUT 来更新特定的狗。再次感谢您的帮助。
    • 不用担心。如果这是正确答案,请不要忘记将其标记为正确答案。
    【解决方案2】:

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

    【讨论】:

    • 哦,好吧。值得一试:)
    猜你喜欢
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多