DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Views, FormHelper e Actions - Introdução ao CakePHP

Veja nesse artigo a continuação da nossa introdução ao CakePHP. Nessa continuação veremos como criar nossas páginas personalizadas, ou seja, nossas views utilizado o FormHelper e veremos também os que são as actions no CakePHP.

Criando as Views

As views não são nada mais do que as páginas de visualização dos clientes. Para criarmos as views devemos seguir alguns padrões obrigatórios. Vejamos a criação de uma view para nosso exemplo do artigo anterior.

Veja o post anterior nesse link Instalação e Scaffold - Introdução ao CakePHP

Vamos criar a view de cadastro de autores. Para isso primeiro crie uma pasta chamada Autors dentro de app/View. Agora crie um arquivo com o conteúdo abaixo.

Listagem 1: Criando view de cadastro de autores

	Cadastro de autor<br/> 
	<?php 
	    /*
	      não se assute com a linha abaixo, estaremos fazendo uso de metodos
                do FormHelper, a seguir e em outros posts veremos esse e outros  
               helpers detalhadamente.	
	   */	
	    echo  $this->Form->create(“Autor”);
              //criando o form para o model Autor.
	   echo  $this->Form->input(“name”);
              //criando um input text para o campo name da tabela.
         	    echo  $this->Form->end(“Salvar”);
              //fecha o form e coloca um botão submit.
	?>
	

E salve-o com o nome de cadastrar.ctp, isso mesmo .ctp, essa é a extensão usada nas views do cake, mas não é nada de mais é como um arquivo .php.

Por padrão o arquivo .ctp deve ficar numa pasta com o nome da tabela.

Um pouco sobre o FormHelper.

Na criação do arquivo no exemplo anterior usamos métodos do FormHelper que é um dos ajudantes padrões do Cake e já vem definido para ser usado em todas as views. O FormHelper, assim como os outros helpers, nos ajuda a economizar muitas linhas de código, nesse caso linhas de html na construção de formulários e também deixa o código bem mais enxuto. Vamos analisar o que fizemos anteriormente.

Listagem 2: Analise da view de cadastro de autores

	Cadastro de autor<br/> 
	<?php 
          /*
	Aqui criamos o form e o referenciamos ao model Autor, assim ele já sabe 
         qual é o tipo 	de campo do banco e dessa forma tenta criar um input  
         adequado a ele, caso não seja suficiente essa criação pode ser 
         feita manualmente.
	Esse método corresponde a <form>
	*/
	   echo  $this->Form->create(“Autor”);
	/*
	O método input tenta criar um input html adequado a coluna no banco 
         de dados e coloca uma label com o nome da tabela.

	Podemos definir propriedades caso seja necessário. Por exemplo,
         podemos definir uma label específica através do segundo 
         parâmetro do método(Veja abaixo).

	Também podemos definir tipo, tamanho, classe css entre outros atributos. 

	O primeiro parâmetro serve alem de indicar qual o campo está se 
         referenciando o input também para como setarmos o nome do input que 
         segui a nomenclatura padrão do cake data['NomeDoModel']['NomeDoCampo']. 
         Podemos usar array('name'=>'NomeDoCampo') para setarmos o nome do campo.

	Podemos setar o tipo usando também o segundo parâmetro, assim: 	
         array('type'=>'hidden'), se quisermos um campo oculto.
	*/
	   echo  $this->Form->input(“name”,array(
				'label'=>”Nome”
	                )
	   );

	//com essa modificação ao invés de aparecer “Name” como label aparecerá “Nome”
	/*
	Método end() fecha o form e se for passado o parâmetro será gerado 
         automaticamente um botão submit por form.
	Seria como um </form>.
	*/
         	   echo  $this->Form->end(“Salvar”);
         //fecha o form e coloca um botão submit.
	?>
	

O relacionamento entre o campo da tabela e o input html é baseado na tabela abaixo.

Coluna Input Html
Varchar,char. Text
Boolean,tinyint(1) Checkbox
Text Textarea
Varchar com o nome de pass,password ou psword Password
Date Select com dia,mês e ano
Datetime ou timestamp Select com dia,mês, ano, hora, minuto e segundo.
Time Select com hora, minuto e segundo.
Chaves estrangeiras select

Agora vamos criar a view de cadastro de receita.

Primeiramente criamos a pasta Receitas(Nome da tabela) dentro de View, e agora um arquivo cadastro.ctp com o seguinte conteúdo:

Listagem 3: Criando view de cadastro de Receitas

		Cadastro de Receitas<br/>
		<?php 
			echo $this->Form->create(“Receita”);
			echo $this->Form->input(“titile”,array('label'=>'Título'));
			echo $this->Form->input('texto',array('label'=>'Receita'));
			//aqui estamos criando um select com o relaciomaneto
			echo $this->Form->input(“autor_id”,array(“label”=>'Autor'));
			echo $this->Form->end('Postar');
		?>
	  

Pronto Views terminandas. Mas espera aí, não vimos em momento algum para que action seriam enviados nossos dados e nem o tipo de método.

O tipo de método por padrão é post ao menos que você especifique com Form->create(“Model”,array(‘method’=>”get”)), a action vamos ver agora mesmo.

Actions

Bem, aqui vamos trabalhar nos controllers. Vamos abrir o arquivo AutorsController.php criado no artigo anterior.

Vamos criar uma action seguindo as especificações do CakePHP.

Uma action não é nada mais do que um função publica (public function) que pode ser acessada por uma view. As action tem o mesmo nome do arquivo .ctp e é dessa forma que que o form se comunica com a action e vice-versa. Veja o Exemplo:

Listagem 4: Criando action de cadastro de autores

class AutorsController extends AppController {
   public function cadastrar(){
   // verifica se a requisição é do tipo post
      if($this->request->is(“POST”)){
         //salva os dados que vem no array data, nesse caso data são os 
         //dados do post, usando o método save() de Autor, herdado de //Model.	
        $this->Autor->save($this->request->data);
      }
   }	 
} 	

Na Listagem 3 vimos a criação da action cadastrar do controller autors, nós verificamos se o tipo de requisição foi um POST usando o método is de Request, tema par outro post, ai então salvamos usando save($data) de Autor, por padrão todo controller tem um model atrelado a ele por meio da nomenclatura das classes. Request também trás um array data que são os dados do POST e no final da action o controller renderiza a view de mesmo nome.

Obs: retiramos a variável scaffold.

Vamos ver como fica a action de receita.

Listagem 5: criação da action para cadastro de receita

class ReceitasController extends AppController {
	public function cadastrar(){
            if($this->request->is(“POST”)){
            	$this->Receita->save($this->request->data);	
            }
            $autores = $this->Receita->Autor->find(‘list’);
            $this->set(‘autors’,$autores);
         }
 
}	

Na Listagem 4 temos uma lógica muito parecida com o dá Listagem 3 diferenciando apenas nas ultimas linhas da função. Na penúltima linha estamos usando o método find(); de Model para recuperar nosso autores cadastrados, o parâmetro ‘list’ indica que ele deve retornar um array no formato de lista, algo como ID=>NOME, que é ideal para selects HTML. Na próxima linha estamos enviando uma variável para a view usando o método set() para passarmos o array $autors para a view assim podemos usa-la na view. Lembrando que a variável passa para a view com o nome do primeiro parâmetro do método set() mas com o conteúdo do segundo parâmetro. Na view a variável á convertida automaticamente para select no campo autor_id devido s todas as padronização que estamos seguindo, mas claro que tudo isso pode ser configurável.

Obs: Usamos $this->Receita->Autor->find(‘list’) pois o controlador receita tem o model Receita atrelado a ele e Receita tem um relacionamento com Autor do tipo 1:n, então todo model de Receita terá um model de Autor.

Agora podemos acessar nossas views pela url /projeto/autors/cadastrar, ou seja, /nomeDoProjeto/controller/action.

Vamos lá testem.

Ops! Deu um erro na hora de recuperar os autores não é?

Faltou mapearmos o relacionamento entre Receita e Autor, isso foi proposital pois não é o foco desse post mas cole o código abaixo no model Receita que tudo deve funcionar.

Listagem 6: relacionamento entre Receita e Autor

public $hasOne = array(
        'Autor' => array(
            'className'  => 'Autor',
        )
    );

Então é isso por enquanto até o próximo post, no qual falarei sobre mais sobre o Model e terminaremos nosso CRUD. Até lá.


Allan Douglas
Analista Programador, com foco nas linguagens Java e PHP, Tecnico em Informática Formado pela Escola Técnica Redentorista - Campina Grande Paraíba. Graduando em Análise de Sistemas pela Estácio do Recife.
O que você achou deste post?

    3 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Mauricio De Souza,
"Form" ao Invés de "From"

Listagem 2 -> Linha 7 -> echo $this->Form->input("autor_id",array("label"=>"Autor"));
[há +1 mês] - Responder

 

[autor] Allan Douglas
Obrigado meu velho! achei que já tinham acertado isso.
[há +1 mês] - Responder
 

Joel Rodrigues
Olá a todos. A correção no código já foi feita.
[há +1 mês] - Responder
 
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03