2017-08-03 2 views
2

je catégories Route::resource('category', 'CategoriesController');Créer un sujet pour la catégorie avec le concept de ressources CRUD de Laravel

Et chaque catégorie ont des sujets, les sujets sous Route::resource('topic', 'TopicsController');.

Dans chaque catégorie sont des rubriques.

Donc, nous pouvons aller à la catégorie spécifique, par ex. /category/Games et ici nous avons des sujets sur les jeux, par ex. sujet WoW. Ce sujet est sous /topic/WoW. Tous avec l'utilisation de la méthode show

Et maintenant mon problème

Supposons que l'utilisateur veut créer un nouveau sujet, il est en /category/Games, clique sur le bouton New Topic qui pointe vers /topics/create ... Pour donner la capacité aux utilisateurs de créer un nouveau sujet Je suppose que je devrais utiliser la méthode create de cette ressource TopicsController selon CRUD ressources metodology

Mais

Si je le fais, ce sera comme /topic/create

Alors, comment puis-je savoir à ce sujet Category ce sujet doit aller?

Si j'avais comme /category/WoW/topic/create Ensuite, je pourrais prendre le nom de la section, je l'aurais.

Mais comme je pense en fonction de cette métodologie CRUD correctement, je devrais le placer comme je l'ai dit dans create méthode de la ressource TopicsController, mais qu'en est-il alors de savoir à quelle catégorie l'utilisateur voulait le faire? Je ne sais pas comment gérer correctement cette situation

+0

pour les données associées ou l'entité à laquelle vous avez transmis les données associées à votre API. Par exemple, si le sujet n'existe pas sans catégorie, alors au moment de la création du sujet, vous devez transmettre le nom unique de votre catégorie ou quelque chose qui rend votre catégorie unique et facile à choisir. – webDev

+0

Vous pouvez donner une liste déroulante de catégories dans votre formulaire et l'utilisateur sélectionnera une catégorie selon ce qu'il veut. – Webinion

+0

@PandhiBhaumik ce n'est pas une option. Il s'agit de catégories de forum, de sujets et d'articles :) –

Répondre

2

Comme mentionné dans ce Laracast discussion, vous pouvez utiliser la syntaxe point pour spécifier des modèles imbriqués dans votre itinéraire de ressources. Dans votre cas, cela signifierait en /routes/routes.php (en Laravel 5.3+) ou app/Http/routes.php (en Laravel 5,0 à 5,2):

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

Cela vous besoin pour créer un contrôleur de ressources pour cette utilisation. Dans la ligne de commande:

php artisan make:controller CategoryTopicController --resource 

--resource crée automatiquement les méthodes nécessaires pour démarrer rapidement, mais vous pouvez les écrire manuellement (assurez-vous qu'ils vont de pair avec ce spécifiez le php artisan route:list).

Finalement, vous venez à ces routes:

  • GET /category/{category}/topic ainsi que la méthode index()
  • GET /category/{category}/topic/{topic} ainsi que la méthode show($id)
  • POST /category/{category}/topic avec la méthode store(Request $request)
  • PUT /category/{category}/topic/{topic} avec la méthode update(Request $request, $id)
  • SUPPRIMER /category/{category}/topic/{topic} avec la méthode destroy($id)

Même si Laravel créé les méthode avec le paramètre $id, vous pouvez considérer une chaîne (le meilleur est une limace que vous pouvez inclure dans vos itinéraires, comme /category/wow/topic/create ou /category/rainbow-6/topic/create). N'oubliez pas de créer les modèles si cela n'a pas été fait: php artisan make:model Category --table=category && php artisan make:model Topic --table=topic

Espérons que ça aide.

Modifier

Depuis mai 2017, si vous voulez vous débarrasser des additionnels routes edit et create (qui sont les routes que pour l'affichage des formulaires pour faire une store ou un update à votre ressource), vous pouvez utiliser Route::apiResource au lieu de Route::resource (voir this pull request, une information provenant de this laraveldaily post).