Implementando o cadastro de tarefas com Yii parte 2

Vamos utilizar o Gii para criar a classe de modelo para entidade Issue (tarefas).

Em Table Name: tbl_issue
Em ModelClass: Issue
Verifique se Build Relations esta marcado, esta opção ira garantir o relacionamento da class.
Preview e depois Generate

Aplique o mesmo procedimento para criar a class model para tbl_user

Quanto ao relacionamento muitos-para-muitos entre as tabelas projetos e usuários, no momento basta saber que o Yii já resolveu isto para a gente.

Criando operações de CRUD

Vamos utilizar o Gii novamente, para criar o CRUD de Issue.

Em Model Class: Issue
Em Controller ID: issue

Como podemos ver, repetimos o procedimento para criar a class modelo e o CRUD, este é basicamente o procedimento padrão para criação de qualquer aplicação, porem não é suficiente, pois no exemplo que estamos construindo existem campos que devem ser preenchidos automaticamente pelo sistema, assim como campos que devem conter valores de outras tabelas que formam o relacionamento como é o caso dos campos: Project que deveria conter uma listagem de projetos, o campo Types que deveria ter 3 tipos padrões (Bugs, Recursos e Tarefas) e o campo Update Time que deveria ser preenchido pelo sistema no momento da gravação.

Como exemplo vamos implementar a combo para o campo Type, que deverá conter 3 tipos como citados acima. Para isso vá no arquivo model de issue e adicione as três constantes abaixo:

Agora adicione o método getTypeOptions() que irá retornar uma matriz com base nas constantes definidas.

Adicione o código abaixo no início da class model Issue:

 

Abra agora o arquivo view que contem o formulário ./protected/view/issue/_form.php

Ache o bloco de código referente ao tipo (type):

 

No topo deste arquivo existe um outro bloco de comando parecido com:

 

Por enquanto basta saber que CActiveForm é uma class que fornece um conjunto de métodos que nos ajudarão na criação dos formulários.

E para entender as variáveis do nosso arquivo de visão temos que visualizar quem a renderiza, que no caso é o nosso arquivo de controller: IssueController.php

Neste arquivo existe um método chamado actionCreate() que é o método que controla a renderização.

Veja que logo de início no método é instanciada a class Issue na variável $model:

$model=new Issue;

Sendo assim $model traz todas as características que serão vinculadas a view em questão, como podemos ver no arquivo _form.php onde iremos substituir para o campo type_id, o método textField pelo dropDownLista afim de atingirmos o resultado esperado.

Vamos substituir o bloco:

<?php echo $form->textField($model,’type_id’); ?>

Por este:

<?php echo $form->dropDownList($model, ‘type_id’, $model->getTypeOptions()); ?>

dropDownList(modelo, ‘atributo do modelo’, método que retorna uma matriz)

No browser acesse index.php/issue/create e veja o resultado.

Faça você mesmo

Agora realize o mesmo procedimento para popular o campo Status, que pode receber os seguintes valores:

  • Não iniciado
  • Iniciado
  • Terminado

No model issue.php crie as constantes:

 

Crie o método para criar a matriz de pares de valores:

 

No arquivo view _form.php de isset, modifique o método textField do campo status_id para:

<?php echo $form->dropDownList($model, ‘status_id’, $model->getStatusOptions()); ?>

Validação

Por uma questão de boas práticas, vamos criar uma validação para os valores que serão inseridos na combo da seguinte forma:

Adicione a seguinte regra ao model issue.php:

array(‘type_id’, ‘in’, ‘range’=>self::getAllowedTypeRange()),

Crie o seguinte método também no model issue.php:

 

Faça isso para o campo status_id modificando os campos.

Assim iremos garantir que os valores de entrada estarão dentro da faixa de valores especificadas no array que carrega os valores da combo.

 

* Todo o conteúdo deste post é uma interpretação minha ou uma sequencia de passos tirados do livro Web Application Development With Yii and PHP. Que pode ser adquirido pelo link: http://www.amazon.com/Web-Application-Development-Yii-PHP/dp/1849518726

Escrevo esta sequencia de posts para documentar os estudos que realizo sobre este framework e ao mesmo tempo partilhar e trocar conhecimento com outros desenvolvedores.

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">