Mark Gerald

Martins

Web Developer


Meu blog

Seja bem vindo ao meu blog! Aqui trato assuntos ligados ao desenvolvimento web, php, mysql, frameworks, ide´s, e-commerce, cms´s, seo e muito mais!

PUGXMultiUserBundle / FOSUserBundle – Symfony 3

Maio 31, 2017mark0 Comentário

A partir de uma dúvida no grupo “Symfony Brasil” do Facebook, resolvi criar este tutorial para utilização deste “hack” do FOSUserBundle, que permite separar dados de cadastro de diferentes “tipos”, utilizando o Bundle mais utilizado para controle de acesso no Symfony.

Problema

Se preciso de dados separados, por exemplo, para pessoa física e jurídica, a entidade criada pelo FOSUserBundle, não me permite, nativamente, separar estes dados.

Contexto

O Bundle PUGXMultiUserBundle, é um “hack” para o FOSUSerBundle que permite que isto ocorra, criando 2 ou  mais tabelas “auxilares” para a tabela principal de usuário do FOSUserBundle. Com isso, você pode separar os dados dos “tipos” de usuário, mantendo na tabela principal, apenas os dados que se referem ao login/acesso.

Mãos à obra!

Nosso tutorial começa com uma instalação padrão do symfony já realizada, utilizando o PHP 7.0 e o MySQL 5.7, além do composer já configurado. Com suas configurações iniciais já realizadas(banco de dados e etc…), vamos instalar o PUGXMultiUserBundle!

Em seu terminal, dentro da pasta do projeto rodar o comando:

Após o sucesso da instalação(problemas, reportar nos comentários), vamos configurar primeiramente o FOSUserBundle, que foi instalado junto, pois é uma dependência.

Registrando FOSUserBundle

Alterar o arquivo AppKernel, adicionando o Bundle:

 

Entidade User

Vamos utilizar o Bundle “AppBundle” criado por padrão na instalação do Symfony. Dentro deste Bundle, criaremos a pasta “Entity” e dentro dela o arquivo User.php:

Configuração Security

Agora precisamos alterar nosso arquivo de security padrão no symfony, localizado em app/config/security.yml:

Mais configurações FOSUser

Em nosso arquivo app/config/config.yml precisamos configurar a chamada da Entidade que criamos anteriormente para o FOSUserBundle, adicionando ao final deste arquivo:

Finalizando a configuração padrão do FOSUserBundle, temos de adicionar as rotas padrão dele em nosso arquivo de rotas em app/config/routing.yml:

 

Testando FOSUser

Para finalizar a configuração, devemos rodar um schema:update do doctrine, para que o mesmo cria a tabela relacionada a entidade que criamos anteriormente. Para isso rode o seguinte comando:

O resultado de sucesso, deve ser o mostrado abaixo:

Para testar se as url´s configuradas, estão funcionando teste acessando os links abaixo, e veja seus resultados.

http://seu_symfony/register/

Clique para ampliar

http://seu_symfony/login/

Clique para ampliar

Configuração PUGXMultiUserBundle

Registre o Bundle no app/AppKernel.php:

Entidades Adicionais

Criaremos 2 novas entidades, uma chamada “Worker” e outra chamada “Employer”, dividindo nosso cadastro em trabalhadores e empregadores. Porém, antes precisamos alterar nossa Entidade “User”. Esta “relação” é feita utilizando a funcionalidade do Doctrine “Inheritance Mapping”, ou mapeamento de herança. Ela deve ser configurada, a partir da entidade “mãe” das outras, que no nosso caso, é a “User”:

Explicando:  o InjeritanceType do tipo Joined, faz um tipo de relação entre essas tabelas, utilizando um “Discriminator”, que será um campo na tabela “user” do tipo “string”, indicando “worker” para a entidade Worker e “employer”, para a entidade “Employer”.

A entidade Worker, conterá os atributos “name” e “cpf”, e a Employer terá “companyName” e “cnpj” como atributos. Estes serão os campos diferenciais, criando em suas respectivas tabelas.

Abaixo seguem códigos das duas novas entidades relacionadas, que devem ser alocadas na pasta src/AppBundle/Entity:

Configurações

Agora, novamente iremos alterar o arquivo app/config/config.yml. adicionando as configurações do PUGXMultiUser, logo abaixo das linhas adicionadas referentes ao FOSUser:

Também teremos uma pequena alteração na configuração do fos_user no arquivo app/config/config.yml, informando a utilização do service de user_manager do pugx:

Agora vamos rodar novamente o schema-update, para que atualize nosso banco de dados, fazendo a alteração na tabela “user” e criando as novas tabelas “worker” e “employer”:

Dando certo, o resultado deve ser este:

Conferir em sua base de dados, se foi criado um campo chamado “type” dentro da tabela “user” e se as tabelas “worker” e “employer” foram criadas corretamente.

Sobrescrevendo formulários e Controllers

Como criamos novos “campos” para os cadastros, precisamos criar novos “forms” e “controllers” para estas ações, assim como suas respectivas “rotas”.

Vamos criar novos formulários do Symfony, relacionados com o formulário padrão do FOSUser, na pasta src/AppBundle/Form:

Agora, precisamos de controllers para utilizar o serviço de registro do PUGX:

Rotas e Configuração de sobrescrita

Para finalizar os testes, vamos altera algumas configurações no arquivo app/config/config.yml:

Adicionamos, configurações a respeito dos novos formulários criados, sobrescrevendo assim os padrões do FOSUser.

Adicionamos agora 2 rotas, para registros de “workers” e “employers”, no arquivo app/config/routing.yml apontando para os 2 controllers criados anteriormente:

agora, vamos testar o acesso, acessando nossa url de instalação do Symfony com essas rotas:

http://sua_rota_do_symfony/register/worker

http://sua_rota_do_symfony/register/employer

Se tudo estiver correto, proceda com os cadastros, e confira as tabelas e os dados cadastrados e faça os testes de Login!

Os arquivos Fontes deste tutorial, se encontram no GitHub: https://github.com/markgerald/pugxmultiusertutorial

 

E aí, o que achou do tutorial? Tem algum assunto específico do Symfony que gostaria? Deixe sua sugestão nos comentários, pois vem muito mais por aí!

Share Button

Deixe um comentário