Como trabalhar com controllers que serão utilizados pelo domínio principal e pelos subdomínios
[Finalizado Pelo Aluno]
Boa noite,
Como ficam os controllers que serão usados para ambas aplicações (tenants e subdomínios)? Um exemplo é para controle de cidades. A empresa será vinculada a uma cidade. Assim como os clientes também serão vinculados a uma cidade. Estou seguindo este curso e o Larafood. Lá separou os controllers nas pastas site, admin e api. Aqui neste curso, tenant e e soltos na raíz. Gostaria de manter a organização de pastas, porém, para os módulos que serão de ambas aplicações não estou conseguindo encaixar no seu devido local.
Outra situação é referente a edição da empresa. Gostaria de ter um formulário onde a empresa pudesse atualizar seus dados. Neste caso, usa o mesmo controller e view com controle de permissões? E sobre a conexão, como ficaria para alterar a conexão para o domínio principal para sincronizar as alterações também no domínio principal e depois voltar para a conexão referente ao subdomínio?
Olá, Allex!
Tudo bem?
1) A relação aqui é um pouco diferente, pensa em atores com ações diferentes dentro do sistema.
Um ator tem por objetivo gerenciar os tenants (apenas isso).
O outro, tem como objetivo utilizar os recursos do sistema.
Eles terão o mesmo papel dentro do sistema?
Se forma alguma.
Ah, mas meu admin precisa também controlar algo que o tenant controla, como lidar?
Resposta: Esse admin não seria um tenant?
Sim, se ele vai desempenhar uma ação de um tenant, logo ele é um tenant também, logo precisa cadastrar um novo tenant para fazer isso.
Porque o papel do ator um é apenas trabalhar com a administração dos tenants (empresas)
----
2) Pergunta bastante interessante amigo.
Você tem algumas opções.
Você pode ter o formulário com os dados da empresa para que ela possa atualizar, até aqui tranquilo, certo?
Uma alternativa é deixar a action deste formulário para a sua URL principal, assim já vai conectar nela. E lá você nas validações você valida também se o usuário está tentando atualizar os seus próprios dados, e não dados de outros tenants.
action="{{ config('tenants.url_main') }}"
Pegou a ideia amigo?
Sobre a resposta 1, a dúvida é para não duplicar controllers em pastas diferentes, como:
app/Http/Controllers/Tenant/CityController
app/Http/Controllers/System/CityController
Em ambas situações, existirá um CRUD, onde terá opção de pesquisar e se necessário inserir a cidade através de uma consulta pelo ViaCEP ou por um formulário, editar e excluir uma cidade. A tabela cidade relacionará com empresa, clientes, fornecedores. Em comum no domínio principal e subdomínio, será só a tabela empresa, porém, existe a necessidade de ter este controller também para tenant. Esse é um exemplo, existem outros controllers que existem em ambas aplicações.
Se analisar os princípios do SOLID ter 2 controllers "duplicados" não seria o real problema, errado seria por exemplo, um controller estender do outro.
O que eu te respondo neste caso amigo?
Cria um service layer (app/Services/SeuServiceAqui) e injeta no construtor dos controllers esse service, e use os métodos dele, assim você centraliza o conteúdo duplicado em um só lugar, e não fere os princípios do SOLID.
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!