Gii

No artigo anterior, finalizamos a criação das migrations do nosso projeto vitrine. Nesse artigo conheceremos a mais poderosa ferramenta do Yii Framework, o Gii.

O que e o Gii?

O Gii é um gerador de código que vai agilizar muito o seu trabalho, ele cria os seus CRUDs de uma forma rápida e visual, ou seja, faz tudo pelo seu navegador. Ouso dizer que, com apenas 2 cliques, terá seu cadastro funcionando 100%, com suas devidas validações e formatações. Ele cria também módulos e extensões para o Yii Framework.

Resumindo, o Gii vai fazer para você toda aquela coisa chata de criar o model, depois criar o controller, formulários, fazer as validações e etc. De uma forma organizada, limpa e rápida.

Para acessar o Gii basta chamar no seu navegador http://localhost/vitrine/web/gii

Gerando os Models (modelos)

O primeiro passo para o CRUD é gerar o model pelo Gii. Abaixo do título Model Generator clique no botão Start. Como ele possui o autocomplete, assim que começar a digitar o nome de alguma tabela no campo Table Name, ele ira sugerir os possíveis nomes e também irá preencher o campo Model Class após escolher a tabela.

Explicando alguns campos.

  • Namespace: É o local onde o modelo será criado e também será o namespace usado no model;
  • Base Class: É o arquivo base do modelo, ou seja, o que será estendido na classe;
  • Database Connection ID: É o arquivo de configuração de banco de dados da aplicação;
  • Generate Relations: Cria as relações entre as chaves estrangeiras de outras tabelas;
  • Enable I18N: Faz com que as Labels geradas pelo Gii, seja preparado para utilizar tradução em casos de site múltiplos idiomas.

Dica: Se no campo Table Name, for utilizado o carácter asterisco * o Gii irá gerar o modelo de todas as tabelas do banco.


Model About

Reproduza exatamente como na imagem acima e depois clique no botão Preview.

Após clicar em preview é gerado uma lista com o arquivo gerado. Como pode ser visto na imagem abaixo.

Após a geração do model é exibida a seguinte mensagem.

Model Category

Reproduza exatamente como na imagem acima e depois clique no botão Preview e depois clique no botão Generate.

Perceba uma coisa muito importante, a tabela está no plural (Categories), mas o model eu gerei no singular (Category). Isso é uma prática comum para os models.

O nome do model está no singular

Para a criação dos models Product e ProductImage siga o mesmo exemplo de Category, e para nomes compostos é o padrão CamelCase, ou seja, ProductImage.

Se for no seu diretório models da sua aplicação verá todos os modelos criados.

Muito simples não é?


Gerando o CRUD

Esse é o segundo passo mais importante do processo, pois aqui serão criados todos os Controllers, e Views da nossa aplicação.

No menu do Gii, clique no link CRUD generator e verá uma tela como a imagem abaixo.

Vamos a explicação dos principais campos.

  • Model Class: Aqui vamos colocar o caminho (namespace) de onde está o nosso model e claro o model que desejamos criar o CRUD;
  • Search Model Class: Esse campo habilita filtros e ordenação na listagem dos itens (index.php) e também cria um novo model como por exemplo XptoSearch.php;
  • Controller Class: Aqui vamos colocar o caminho (namespace) de onde está o nosso controller e o nome dele;
  • View Path: Caminho de onde vão ficar as views. Aqui geralmente não alteramos, a não ser que queira um caminho diferente;
  • Enable I18N: Ao marcar essa opção ele habilita o translate nas labels e textos das views, possibilitando você fazer um site multi-idiomas;
  • Enable Pjax: Faz com que as pesquisas e ordenações da tela de listagem serem feitas via Ajax.

Agora vamos pôr a mão na massa e criar nossos CRUDs de About, Category e Product.


CRUD About

Reproduza exatamente como na imagem acima e depois clique no botão Preview.

Para o about, não utilizarei o ModelSearch e nem o Pjax, pois futuramente daremos um tratamento especial para ele.

Clique no botão Generate para cria o controller e todas as views de about.

Repare que foi criado o arquivo AboutController.php e todas as views de about estão no diretório views/about.


É sério isso?
Sim meu amigo é só isso. Lembra do Acrônimo do Yii (Yes It Is). Então… Yes It Is.

Que magia é essa aí?
Não tem magia, é só o Gii do Yii fazendo o trabalho pesado e chato para você. Em postagens futuras esmiuçaremos cada uma dessas views e entender o que está por trás disso.

Continuando com os demais CRUDs.


CRUD Category

Reproduza exatamente como na imagem acima, clique na opção Pjax e depois clique no botão Preview.

Observe que na listagem de arquivos tem 2 itens novos o CategorySearh.php e o _search.php.

Listagem de arquivos gerados

CRUD Product

Para criar o CRUD product precisamos fazer uma pequena alteração no arquivo models/Product.php.

Procure por: Categories::className().

[[‘category_id’], ‘exist’, ‘skipOnError’ => true, ‘targetClass’ => Categories::className(), ‘targetAttribute’ => [‘category_id’ => ‘id’]],

E altere para Categoty::className().

[[‘category_id’], ‘exist’, ‘skipOnError’ => true, ‘targetClass’ => Category::className(), ‘targetAttribute’ => [‘category_id’ => ‘id’]],

Repita o mesmo procedimento para o método getCategory().

Isso é necessário para evitar um erro, já que estamos utilizando o nome do Model no singular.

E com apenas isso, o sistema está praticamente pronto. Todos os Inserts (Create), Updates, Deletes e Reads (pesquisas e listagens) já estão funcionado e com suas devidas validações.

Para testar basta acessa alguma url já criada, como por exemplo: http://localhost/vitrine/web/product e http://localhost/vitrine/web/categoty

OBS: Provavelmente verá um o erro na tela de product.

ReflectionException

Class yii\il8n\yii\i18n\Formatter does not exist

Isso ocorre por que no arquivo /config/web.php está com um erro no atributo class do atributo formatter, para corrigir o problema, basta remover o atributo ‘class’ do atributo formatter como na imagem abaixo.

Atributo ‘class’ removido.

Navegue e teste todas as telas de produtos. No próximo post cuidarei dos relacionamentos, tanto das views como nos formulários.

Gente desculpe o post longo, mas esse era preciso ser tudo em uma coisa só, para não ficar com o raciocínio quebrado.

PHPRio

Grupo de usuários de PHP do Rio de Janeiro

)

Cálcio Heavy Metal

Written by

Analista de sistemas e desenvolvedor web com mais de 15 anos de experiência, trabalhando atualmente na Lyseon Tech Saiba mais aqui: http://menezes-portfolio.com

PHPRio

PHPRio

Grupo de usuários de PHP do Rio de Janeiro

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade