【问题标题】:Remove unnecessary parameter from nested resource controller in Laravel 4.x从 Laravel 4.x 中的嵌套资源控制器中删除不必要的参数
【发布时间】:2014-09-27 10:35:22
【问题描述】:

我正在使用通过 routes.php 文件链接的资源控制器通过 Laravel 开发 API。请看下面的例子:

// API routes
Route::group(array('prefix' => 'v1'), function() {

    Route::resource('users', 'UserController');
    Route::resource('users.profile', 'UserProfileController');
    Route::resource('users.tasks', 'UserTaskController');

});

通常,Laravel 在处理这些路由方面做得很好。但是有一个例外,我有一个我挣扎的地方。我的数据库模型旨在通过查看user_profiles 表中的外键user_idusers 表和user_profiles 表之间建立一对一的关系。这意味着它作用于标识关系,因此它没有自己的主键,它实际上是借用了users 表的键。

现在,我想通过输入以下(示例)URL 时调用的UserProfileController 更新UserProfile 模型:http://api.projectX.dev:8000/v1/users/{id of the user}/profile。但是 Laravel 强迫我使用这样的 URL:http://api.projectX.dev:8000/v1/users/{id of the user}/profile/{some other useless ID}

有什么方法可以神奇地从资源路由中删除最后一个 ID 并利用第一个 ID?

我希望有人可以帮助我,因为现在很难找到这个问题的答案。

【问题讨论】:

    标签: php laravel laravel-4 laravel-routing nested-routes


    【解决方案1】:

    您正在创建一个nested resource controller (向下滚动一点)。本质上说一个资源控制器属于另一个资源控制器。您可以使用php artisan routes 准确查看正在生成的路由。

    听起来您需要结合使用资源控制器和明确定义的路由来获得所需的确切设置。我不太了解您希望如何控制更新/删除配置文件,否则我会提供比这更重要的东西。

    【讨论】:

    • 我运行了php artisan routes 命令并得到了以下输出(见链接):Click for screenshot 输出显示我需要调用以下 URL 来更新用户的配置文件:PUT v1/users/{users}/profile/{profile}。但我实际上不需要 {profile} 变量,因为user_profiles 表没有自己的主键,而只使用了一个名为user_id 的外键,它指向users 表。有什么方法可以从路由中删除该 {profile} 参数而无需为其创建自定义路由?
    • 没有。资源控制器路由会自动为您创建所有这些路由。最好为配置文件端点手动创建路由。
    • 谢谢!我会用你的方法来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多