Laravel - Routeresource vs RouteController

Laravel - Routeresource vs RouteController

Problema

Eu li a documentação sobre o site do Laravel, Stack Overflow e Google, mas não tenho certeza de que entendo a diferença entre Route :: Recurso e Route :: Controller.

Uma resposta que encontrei disse Route :: Recurso foi para Crud. No entanto, com Route :: Controller Podemos realizar a mesma coisa que Route :: Recurso E podemos especificar apenas as ações necessárias.

Eles parecem ser como irmãos:

Route :: Controller ('Post', 'Postcontroller');
Route :: Resource ('Post', 'Postcontroller');

Como podemos escolher o que usar? Qual é a melhor prática?

Solução

Controlador de Recursos RESTful

Um controlador de recurso RESTful configura algumas rotas padrão para você e até nomeia.

Route :: Resource ('Usuários', 'Usuárioscontroller');

Dá a você essas rotas nomeadas:

Nome da rota da ação do caminho do verbo
Get /Usuários Index Usuários.índice
Get /Usuários /Criar Usuários.criar
Usuários de postagem /usuários da loja.loja
Get /users /user show usuários.mostrar
Get/users/user/editar editar usuários.editar
Put | Patch /Usuários /User Atualize os usuários.atualizar
Excluir /usuários /user destruir usuários.destruir

E você configuraria seu controlador algo assim (ações = métodos)

Classe UsersController estende o BaseController
Public Function Index ()
Função pública mostra ($ id)
Public Function Store ()

Você também pode escolher quais ações estão incluídas ou excluídas assim:

Route :: Resource ('Usuários', 'Usuárioscontroller', [
'somente' => ['index', 'show']
]);
Route :: Resource ('Monkeys', 'MonkeysController', [
'exceto' => ['editar', 'Criar']
]);

Documentação do controlador de recursos RESTful

Controlador implícito

Um controlador implícito é mais flexível. Você é roteado para seus métodos controladores com base no tipo de solicitação HTTP e nome. No entanto, você não tem nomes de rota definidos para você e ele pegará todas as subpastas para a mesma rota.

Route :: Controller ('Usuários', 'UserController');

Levaria você a configurar o controlador com uma espécie de esquema de nomeação repousante:

classe UserController estende Basecontroller
Função pública getIndex ()

// Obtenha solicitação para indexar

função pública getshow ($ id)

// Obtenha solicitação para 'Usuários/Show/id'

Função pública Postore ()

// Publicar solicitação para 'usuários/lojas'

Documentação implícita do controlador
É uma boa prática usar o que você precisa, conforme sua preferência. Pessoalmente, não gosto dos controladores implícitos, porque eles podem ser confusos, não fornecem nomes e podem ser confusos ao usar rotas artesanais de PHP. Normalmente uso controladores de recursos RESTful em combinação com rotas explícitas.

A outra opinião é que você pode não querer criar muitos controladores para cada ação, que incluiria todos os métodos CRUD. Nesse caso, use os controladores implícitos.