使用Laravel

时间:2017-08-03 16:09:29

标签: php laravel crud

我在Route::resource('category', 'CategoriesController');

中有类别

每个类别都有 Route::resource('topic', 'TopicsController');下的主题和主题。

每个类别都是主题。

所以我们可以去特定类别,例如/category/Games这里我们有关于游戏的主题,例如主题WoW。本主题位于/topic/WoW下。全部使用方法show

现在我的问题

让我们假设用户想要创建新主题,他在/category/Games,点击按钮New Topic指向/topics/create ...为了让用户能够创建新主题我假设我应该根据CRUD资源元数据

使用此资源create的{​​{1}}方法

但是

如果我这样做,就会像TopicsController

那么接下来我将如何知道该主题必须包含哪些/topic/create

如果我喜欢Category那么我可以使用部分名称,我会拥有它。

但正如我认为正确地根据这个CRUD方法论,我应该按照我在资源/category/WoW/topic/create的{​​{1}}方法中所说的那样放置它,但那么知道用户希望它去哪个类别呢?我不知道我应该如何处理这种情况

1 个答案:

答案 0 :(得分:2)

如本Laracast discussion所述,您可以使用点语法指定资源路径中的嵌套模型。在你的情况下,这意味着在/routes/routes.php(在Laravel 5.3+中)或在app/Http/routes.php中(在Laravel 5.0 - 5.2中):

Route::resource('category.topic', 'CategoryTopicController');

这将需要您为此用途创建资源控制器。在命令行中:

php artisan make:controller CategoryTopicController --resource

--resource会自动创建快速启动的必要方法,但您可以手动编写它们(确保它们符合php artisan route:list指定的内容。)

最终你走上了这些路线:

  • 获取/category/{category}/topic以及方法index()
  • 获取/category/{category}/topic/{topic}以及方法show($id)
  • POST /category/{category}/topic以及方法store(Request $request)
  • PUT /category/{category}/topic/{topic}以及方法update(Request $request, $id)
  • 删除/category/{category}/topic/{topic}以及方法destroy($id)

即使Laravel使用$id参数创建了这些方法,您也可以将其视为一个字符串(最好是一个可以包含在您的路径中的slug,例如/category/wow/topic/create/category/rainbow-6/topic/create

如果没有完成,请不要忘记创建模型:php artisan make:model Category --table=category && php artisan make:model Topic --table=topic

希望它有所帮助。

修改

自2017年5月起,如果您想摆脱额外路线editcreate(这些路线仅用于显示表单以生成storeupdate在您的资源中),您可以使用Route::apiResource代替Route::resource(请参阅this pull request来自this laraveldaily post的信息)。