Gii

Cálcio Heavy Metal
PHPRio
Published in
5 min readAug 26, 2017

--

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.

--

--