我会结合这两个答案。作为一种关系,它在技术上是一种嵌套资源。此外,您确实有 2 个 RESTful 操作:存储和销毁(对应于 Laravel 中的附加和分离)。您可能还需要一个索引来查看所有关系。我相信“创建”操作是可选的,具体取决于您的 UI。
// Ability_Role pivot routes
Route::resource('v1/user.cards', 'UserCardController')
->only(['index', 'create', 'store','destroy']);
这将给出以下路线:
+--------+----------+------------------------------+--------------------+-------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+------------------------------+--------------------+-------------------------------------------------+------------+
| | GET|HEAD | v1/user/{user}/cards | user.cards.index | App\Http\Controllers\UserCardController@index | web |
| | POST | v1/user/{user}/cards | user.cards.store | App\Http\Controllers\UserCardController@store | web |
| | GET|HEAD | v1/user/{user}/cards/create | user.cards.create | App\Http\Controllers\UserCardController@create | web |
| | DELETE | v1/user/{user}/cards/{card} | user.cards.destroy | App\Http\Controllers\UserCardController@destroy | web |
+--------+----------+------------------------------+--------------------+-------------------------------------------------+------------+
我选择将路线标记为 user.cards,因为我认为您更经常希望从用户模型开始并附加卡片。
对于 store 方法,您可以发布一组卡片以附加给用户。
如果您还想从卡片开始,并存储一组用户,您还可以定义反向关系(尽管它需要一个仅包含创建和存储路由的第二个控制器:
// Inverse create and store routes
Route::get('v1/cards/{card}/users/create', 'CardUserController@create')
->name('cards.users.create');
Route::post('v1/cards/{card}/users', 'CardUserController@store')
->name('cards.users.store');
现在您将获得另外 2 条路线:
+--------+----------+------------------------------+--------------------+-------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+------------------------------+--------------------+-------------------------------------------------+------------+
| | GET|HEAD | api/user | api. | Closure | api |
| | | | | | auth:api |
| | POST | v1/cards/{card}/users | cards.users.store | App\Http\Controllers\CardUserController@store | web |
| | GET|HEAD | v1/cards/{card}/users/create | cards.users.create | App\Http\Controllers\CardUserController@create | web |
| | GET|HEAD | v1/user/{user}/cards | user.cards.index | App\Http\Controllers\UserCardController@index | web |
| | POST | v1/user/{user}/cards | user.cards.store | App\Http\Controllers\UserCardController@store | web |
| | GET|HEAD | v1/user/{user}/cards/create | user.cards.create | App\Http\Controllers\UserCardController@create | web |
| | DELETE | v1/user/{user}/cards/{card} | user.cards.destroy | App\Http\Controllers\UserCardController@destroy | web |
+--------+----------+------------------------------+--------------------+-------------------------------------------------+------------+