Sei sulla pagina 1di 20

Introduo

Desenvolver um sistema com qualidade, dentro do prazo e custo estipulados um desao que as empresas de desenvolvimento de software sempre buscaram atender. Uma soluo conhecida para este problema a reusabilidade. Esta consiste em reaproveitar partes do sistema, que j existem e desta forma obter maior produtividade e qualidade no desenvolvimento. O ganho de qualidade acontece em virtude da reutilizao de partes que j foram testadas previamente em outros trechos do software, ou at mesmo em outras aplicaes. O aumento da produtividade decorre do reaproveitamento de partes j existentes. A reusabilidade pode ser feita atravs de cpia de cdigo-fonte, o que no recomendado, pois replicar o cdigo-fonte pode implicar em problemas de manuteno. Por meio de classes, componentes e herana, podendo chegar a um nvel mais alto que so os frameworks. Um framework uma infra-estrutura ou esqueleto de uma famlia de aplicaes projetado para ser reutilizado. Basicamente, aplicaes especcas so construdas especializando as classes do framework para fornecer a implementao de alguns mtodos e, assim a aplicao implementa somente as funcionalidades especcas (DEUTSCH, 1989). As vantagens do uso de frameworks nos projetos, de acordo com Assis (2003) e Sauv (2004) so: Reduo do tempo de codicao: muitas funcionalidades necessrias j esto disponveis no framework; Solues bem testadas por outras pessoas: Os frameworks so utilizados por muitas pessoas, isto garante um alto nvel de maturidade ao se descobrir erros e adicionar novas funcionalidades; Programadores implementam somente o que necessrio: no preciso que se codique todo o software, pois se utiliza os componentes que j esto prontos; Reduo de erros: os frameworks diminuem o nmero de linhas de codicao, desta forma, reduzem tambm a possibilidade de erros comuns. importante destacar a diferena de um framework para uma biblioteca de classes, dentre as diferenas a de maior destaque a forma como o uxo de execuo controlado. Quando se utiliza uma biblioteca de classes, o programador que dene como vai ser a execuo dos comandos. Diferentemente das bibliotecas, os frameworks invertem este controle de execuo, sendo eles os responsveis por controlar o uxo da execuo.

Sobre o CakePHP
CakePHP um framework para desenvolvimento gil, escrito na linguagem PHP. Ele usa padres de projetos conhecidos, como ORM e MVC; utiliza tambm o paradigma das convenes no lugar do uso de conguraes. Este framework busca a reduo do custo de desenvolvimento atravs da diminuio do nmero de linhas de cdigo-fonte. Ele um software livre, licenciado sob a licena MIT - http://www.opensource.org/licenses/mit-license.php.

Vantagens do CakePHP
Dentre os diversos recursos que agregam valor ao utilizar o CakePHP, podemos citar:

Software livre com uma comunidade crescente e ativa. Tem uma licena exvel (MIT). Compatvel com PHP 4 e 5. Facilidade de gerar a codicao do CRUD. Scaffolding - gerao de telas dinmicas (on the y). Gerao de cdigo-fonte Arquitetura MVC Uso de URLs amigveis Validao embutida

Curso de CakePHP da 2km interativa!

1 of 20

Templates rpidos e exiveis, utilizando sintaxe PHP Desenvolvimento de views com helpers Diversos componentes disponveis Lista de controle de acessos (ACL) Proteo contra dados maliciosos (Data Sanitization) Ferramentas para caching Internacionalizao e Localizao Funciona em qualquer servidor web rodando PHP. E o principal: devolve ao programador a diverso de programar.

1 - Instalao
1.1 - Requisitos para Utilizao do CakePHP
O framework CakePHP funciona em qualquer servidor web que seja capaz de executar scripts em linguagem PHP 4 ou superior. Servidor web: Apache 2.0, LightHTTP, IIS. Sendo recomendado a utilizao do apache com o mdulo mod_rewrite. PHP 5.2.6 ou superior. O CakePHP tambm tem suporte para verso 4 PHP. Banco de Dados suportados pelo CakePHP: MySQL (4 ou superior), PostgreSQL, Firebird, MS SQL SERVER, Oracle, SQLite, ODBC, ADOdb

1.2 - Congurando o Apache


O servidor web Apache um software livre mantido pela organizao Apache Foundation. O servidor Apache o servidor mais utilizado para hospedar pginas na internet. O CakePHP pode ser congurado de diversas maneiras no servidor Apache, este captulo ir apresentar as diferentes formas de congurao, destacando seus prs e contras. O arquivo de congurao do Apache o httpd.conf. Este arquivo encontrado nos sistemas *nix dentro do diretrio /etc/apache2/. No windows o arquivo ser encontrado dentro do diretrio "conf", geralmente localizado no diretrio de instalao do Apache.

1.2.1 - Congurando o mod_rewrite


Este mdulo utilizado para criar endereos (URLs) mais amigveis, evitando endereos longos com diversos &. Por exemplo:

Nota
O endereo: http://www.dominio.com.br/index.php?nome=teste&data=20081110. Utilizando a reescrita de URL poderia ser escrito assim: http://www.dominio.com.br/teste/20081110

Para habilitar o mdulo rewrite no servidor apache basta descomentar* a seguinte linha: #LoadModule rewrite_module modules/mod_rewrite.so Observao: O caminho do mdulo pode alterar dependendo da instalao do Apache ou do sistema operacional.

1.3 - Instalando o CakePHP

Curso de CakePHP da 2km interativa!

2 of 20

O primeiro passo para a instalao do framework fazer o seu download no endereo: Pgina principal do projeto existe um link para a ltima verso estvel: http://cakephp.org Pgina contendo o projeto do CakePHP e diversos outros projetos (components, plugins, etc): http://cakeforge.org/projects/cakephp/ Aps o download dos fontes, necessrio descompactar o arquivo no DocumentRoot do apache. Pasta da DocumentRoot: C:\Arquivos de Prgramas\...\htdocs\ Sendo o contedo de C:\Arquivos de Prgramas\...\htdocs\ as pastas app, cake e vendors.

1.4 - Estrutura de diretrios


Aps descompactar o arquivo baixado pelo site do CakePHP, a seguinte estrutura encontrada: Diretrio /app/ Descrio Aqui a aplicao desenvolvida.

/app/cong/

Onde cam os arquivos de congurao. O arquivo de congurao de banco de dados (database.php) se encontra aqui.

/app/models

As classes da camada de modelo devem ser escritas neste diretrio.

/app/controllers

As classes da camada de controle devem ser escritas neste diretrio.

/app/views

Os arquivos da camada de viso devem ser escritas neste diretrio.

/app/webroot/

Todas as requisies so direcionadas para este diretrio, onde o Dispatcher trata quais arquivos so necessrios para atender cada requisio. As pastas deste diretrio servem como abrigo para arquivos css, imagens, javascripts e qualquer outro arquivo que precisa estar disponveis para requisio direta.

/cake/

Os arquivos do framework cam neste diretrio. O desenvolvedor no deve alterar o contedo desta pasta, somente se souber o que est fazendo.

Estrutura de diretrios do CakePHP

1.5 - Arquivos de congurao do CakePHP


O CakePHP possui poucos arquivos de congurao, devido sua arquitetura baseada em convenes.

Curso de CakePHP da 2km interativa!

3 of 20

1.5.1 - O arquivo de congurao d a t a b a s e . p h p


Para iniciar o desenvolvimento de uma aplicao, necessrio apenas congurar o banco de dados por meio do arquivo: diretrio_do_cake/app/conf/database.php. O banco de dados congurado pelo array: $default, que ilustrado abaixo. var $default = array( 'driver' 'persistent' 'host' 'login' 'password' 'database' 'prefix' );

=> => => => => => =>

'mysql', false, 'localhost', 'cakephpuser', 'c4k3roxx!', 'my_cakephp_project', ''

Congurao do arquivo database.php

1.5.2 - O arquivo de congurao c o r e . p h p


O arquivo core.php possui as conguraes bsicas do framework. Conra abaixo as suas opes de congurao: Varivel debug Descrio Congura o nvel de mensagens de debug que ser mostrado na tela. 0 1 2 3 App.baseUrl = = = = Modo sem nenhuma mensagem, para uso do sistema em produo. Mostra mensagens de erros e advertncias. Mostra mensagens de erros, advertncias e comandos SQL. Mostra mensagens de erros, advertncias, comandos SQL e variveis do controle.

Descomente esta linha caso deseje utilizar o CakePHP sem o mod_rewrite. importante apagar todos os arquivos .htaccess No IIS pode ser necessrio colocar uma ? concatenada, como demonstrado abaixo: Congure::write('App.baseUrl', env('SCRIPT_NAME')."?"); Uma string aleatria, usada para a tabela hash de segurana.

Security.salt

Conguraes do framework no arquivo core.php

2 - Desenvolvendo com o CakePHP


2.1 - Convenes no CakePHP
Apesar de tomar um pouco de tempo para aprender as convenes do CakePHP, voc ganha tempo em um longo processo: seguindo as convenes, voc ganha funcionalidades gratuitamente e livra-se de madrugadas de manuteno de arquivos de congurao. Convenes tambm fazem com que o sistema que uniformemente desenvolvido, permitindo que outros desenvolvedores o ajudem mais facilmente. As convenes no CakePHP tm sido produzidas por anos de experincia em desenvolvimento web e boas prticas. Apesar de sugerimos que voc use essas convenes enquanto desenvolve em CakePHP, devemos mencionar que muitos desses princpios so facilmente sobrescritos - algo que especialmente acontece quando trabalha-se com sistemas legados.

2.1.1 - Todas as Convenes

Curso de CakePHP da 2km interativa!

4 of 20

Local Banco de dados Banco de dados Banco de dados Banco de dados Banco de dados Modelo Modelo Controle Controle Viso Viso

Regra Nome das tabelas: plural, minsculo. Chave primria: nome id, tipo int, auto_increment Nome dos campos: minsculo, usando sublinhados. Chave estrangeira: nome da tabela relacionada no singular, acrescentando sublinhado e id. Relacionamento N-M (HABTM), regra para a tabela de ligao: nome das tabelas em ordem alfabtica, separadas por sublinhado. Nome do arquivo: singular e CamelCase Nome da classe: singular e CamelCase Nome do arquivo: plural, sublinhados e terminado com Controller Nome da classe: plural, CamelCase e terminado com Controller Local do arquivo: dentro da pasta views/nome_do_controle/ Nome do arquivo: deve ter o nome da ao do controle, com sublinhados.

Exemplo usuarios, posts, artigos id int(11) nome, rua, data_de_nascimento cliente_id,grupo_id produtos_usuarios, grupos_usuarios Usuario.php, Grupo.php, Cliente.php Usuario, Grupo usuarios_controller.php, grupos_controller.php UsuariosController, GruposController views/usuarios/, views/grupos/ views/usuarios/index.ctp, views/grupos/add.ctp

Lista de todas as convenes do CakePHP

2.3 - A Arquitetura MVC


A medida que os softwares foram cando maiores e mais complexos, tornou-se necessrio organizar o cdigo-fonte de forma a facilitar o seu entendimento. Uma soluo criada para este problema foi a diviso da aplicao em 3 camadas com funcionalidades distintas, est soluo denominada arquitetura MVC (Model - View - Controller). Basicamente a arquitetura MVC separa o desenvolvimento da aplicao em: Camada de Modelo: parte da programao destinada ao tratamento dos dados. Camada de Controle: responsvel pelas regras de negcio Camada de Viso: responsvel pelo o que apresentado para o cliente A seguir, apresentado o uxo de execuo de uma requisio feita ao CakePHP.

Curso de CakePHP da 2km interativa!

5 of 20

Fluxo da execuo de uma requisio no CakePHP

2.3.1 - A camada de modelo


Essa camada responsvel por representar dados. Ela utilizada para fornecer acesso aos dados, que podem estar armazenados em um banco de dados, um arquivo texto, um arquivo CSV, dentre outras possibilidades. De forma mais usual, geralmente um modelo especco representa uma tabela de um banco de dados. Em programao orientada a objeto podemos dizer que um modelo um objeto que representa algo da realidade. Em outras palavras, um modelo pode ser a representao de uma televiso ou uma cama ou qualquer outro objeto. Para se denir um modelo no CakePHP deve se fazer o seguinte: class Cliente extends AppModel { var $name = 'Cliente'; } Como se pode ver, neste exemplo, a classe Cliente herda da classe AppModel que por sua vez herda da classe Model. A princpio a classe AppModel est vazia. Ela existe para que seja possvel gerar determinados comportamentos comuns a todos os modelos. 2.3.1.1 - Atributos dos modelos

Curso de CakePHP da 2km interativa!

6 of 20

2.3.1.1.1 - useDbCong A propriedade useDbCong dene, atravs de uma string, o nome da conexo com o banco de dados. Por padro a conexo que o CakePHP usa denida no arquivo app/cong/database.php e tem o valor default. necessrio criar o array no arquivo database.php com os dados da conexo. Veja o exemplo a seguir: class Cliente extends AppModel { var $name = 'Cliente'; var $useDbConfig = 'teste'; var $useTable = false; //ou var $useTable = 'testes'; var $tablePrefix = 'user_'; var $primaryKey = 'email'; var $displayField = 'nome'; var $order = "Cliente.nome DESC"; //ou var $order = array("Cliente.nome" => "asc", "Cliente.email" => "DESC"); }
Cdigo no arquivo do modelo

2.3.1.1.2 - useTable Este atributo dene o nome da tabela que o modelo utilizar, somente existir a necessidade de atribuir um valor, caso no esteja sendo utilizada as convenes. Se o modelo no necessitar usar tabela alguma, pode-se utilizar essa propriedade com o valor false. 2.3.1.1.3 - tablePrex Este atributo utilizado para denir o prexo de alguma tabela. Por padro nenhum prexo denido. Pode-se tambm denir o prexo no arquivo app/config/database.php, entretanto se for usado tablePrex no model, essas denies sobrescrevem as denies denidas no app/config/database.php. 2.3.1.1.4 - primaryKey Usualmente toda tabela possui o campo id denido como chave primria. Entretanto, existem casos onde a tabela pode no possuir um campo id, ou pretende-se usar outro campo como chave primria. Neste caso usamos o atributo primaryKey para denir qual campo funcionar dessa forma. 2.3.1.1.5 - displayField O displayField dene qual campo da tabela ser usado como rrulo (label). Esse rtulo usado quando se utiliza scaffolding e nd('list'). Por padro a camada de modelo usa os campos name ou title. No se pode usar mais que um valor para displayField. Portanto, no funcionar utilizar var $displayField = array('valor1', 'valor2'). 2.3.1.1.6 - recursive Recursive utilizado quando o modelo possui relacionamento com outros modelos. Atravs dessa propriedade

Curso de CakePHP da 2km interativa!

7 of 20

pode-se denir at onde o modelo deve trazer os relacionamentos quando existem chamadas para as funes nd e read. Como exemplo prtico, imagine uma aplicao onde uma universidade possui diversos cursos, estes pussuem disciplinas, que tm professores. Logo, Universidade HasMany Curso; Curso HasMany Disciplina; Disciplina HasMany Professor. Ao fazer uma busca na entidade Curso ($this->Curso->Find()), a busca pode se comportar das seguintes formas: Profundidade -1 Descrio Cake procura somente os cursos.

Cake procura por cursos e a universidade ao qual os cursos pertencem.

Cake procura por cursos, universidades e disciplinas associados.

Cake procura por cursos, universidade, disciplinas associados e os professores associados a disciplina.

Valores possveis para a varivel recursive

2.3.1.1.7 - order Dene qual a ordem que os resultados das pesquisas feitas com nd vo retornar. Pode ter o valor ASC, DESC, pode-se tambm ordenar por um campo, ou por um Modelo.campo. possvel ainda utilizar um array com mais de um critrio de ordenao. 2.3.1.1.8 - data Neste atributo armazenado todos os dados retornados em uma pesquisa. Esses dados so armazenados em forma de arrays multidimensionais, que possuem os nomes dos campos como ndices dos arrays. 2.3.1.1.9 - validate Atravs deste atributo possvel ao modelo fazer validaes antes de armazenar os dados no banco de dados ou onde estes dados forem armazenados. class Teste extends AppModel { var $validate = array( 'nome' => array( 'rule'=>array('between',2,20), 'message'=>'O campo deve possuir de 2 a 20 caracteres. ), 'email' => array( 'rule'=>array('email'), 'message'=>'O campo deve conter e-mail vlido.' ), 'comentario' => array( 'rule'=>array('between',5,500), 'message'=>'O campo deve possuir de 5 a 500 caracteres.'

Curso de CakePHP da 2km interativa!

8 of 20

), ); }
Exemplo para uma validao com uma regra:

Os parmetros do array validate Chave Rule Required allowEmpty on message Descrio Regra de vlidao do campo O campo precisa ter dados O campo aceita valor vazio Dene em qual lugar a validao deve ser feita. 'on'=>'create' ou 'on'=>'update' Dene a mensagem que ser apresentada, caso o campo no passe na validao

Parmetros do validate

Algumas regras padres de validao do CakePHP Regra alphaNumeric Validao Para o campo ser vlido ele deve conter apenas caracteres alfanumricos. array('login' => array('rule' => 'alphaNumeric')); between

O campo pode ter qualquer caracter, mas o tamanho do contedo do campo estar entre a faixa determinada. array('senha' => array('rule' => array('between',6,8)));

date

O campo precisa ser uma data vlida. array('data_inicio' => array('rule' => 'date'));

email

O campo precisa ser um email. array('email' => array('rule' => 'email'));

isUnique

O campo deve ser nico no banco de dados. array('ag' => array('rule' => 'isUnique'));

numeric

O campo precisa ser um nmero vlido. array('valor' => array('rule' => 'numeric'));

Regras padres de validao do CakePHP

2.3.1.1.9.1 - Validao Avanada Usando uma regra customizada.

Curso de CakePHP da 2km interativa!

9 of 20

var $validate = array( 'login' => array( 'rule' => array('custom', '/^[a-z0-9]{3,}$/i'), 'message' => 'Somente letras e nmeros so aceitos, mnimo de 3 caracteres' ) );
Exemplo de uma regra customizada utilizando expresso regular

var $validate = array( 'codigoPromocional' => array( 'rule' => array('limiteDeUso', 250), 'message' => 'Cdigo informado foi usado mais vezes do que o permitido.' ) ); function limiteDeUso($data, $limite){ $contador = $this->find('count', array('conditions' => $data, 'recursive' => -1)); return $contador < $limit; }
Exemplo de uma regra customizada utilizando uma funo prpria

var $validate = array( 'login' => array( 'alphanumeric' => array( 'rule' => 'alphaNumeric', 'message' => 'Somente alfanumricos so aceitos' ), 'between' => array( 'rule' => array('between', 4,8), 'message' => 'O campo deve possuir entre 4 e 8 caracteres' ), 'isUnique' => array( 'rule' => array('isUnique'), 'message' => 'O login j existe em nossa base de dados' ), ) );
Usando mais de uma validao no mesmo campo

2.3.1.1.10 - name Este atributo permite que o cdigo do CakePHP na camada de modelo seja compatvel com o php4. Portanto, recomendvel sempre utilizar esta declarao j que pode ocorrer da aplicao ter que mudar para um servidor que utiliza o php nessa verso. 2.3.1.2 - Associando os modelos 2.3.1.2.1 - hasOne Esse tipo de relacionamento usado quando uma tabela pode possuir apenas um resultado relacionado em

Curso de CakePHP da 2km interativa!

10 of 20

outra tabela. Por exemplo, em uma aplicao de comunidade virtual onde se tem uma tabela de Usurio e outra de Perl do Usurio. Cada usurio pode ter apenas um perl. Neste caso o relacionamento entre a tabela Usurio e Perl de Usurio do tipo hasOne. class Usuario extends AppModel { var $name = 'Usuario'; var $hasOne = array('Perfil'); }
Exemplo de uso do hasOne

O exemplo acima a forma mais simples de se estabelecer o relacionamento do tipo hasOne. Existem casos onde necessrio ter mais controle sobre o relacionamento estabelecido. Veja o exemplo seguinte: class Usuario extends AppModel { var $name = 'Usuario'; var $hasOne = array( 'Perfil' => array( 'className' 'conditions' 'dependent' ) ); }
Exemplo de uso avanado do hasOne

=> 'Perfil', => array('Perfil.publicado' => '1'), => true

2.3.1.2.2 - hasMany Seguindo nosso exemplo, o Usurio de nossa comunidade virtual pode ter diversos artigos. Portanto a tabela Usurio estabelece um relacionamento do tipo hasMany com a tabela Artigos. class Usuario extends AppModel { var $name = 'Usuario'; var $hasMany = array('Artigo'); }
Exemplo de uso de hasMany

2.3.1.2.3 - belongsTo Depois de estabelecido o relacionamento do tipo HasOne ou HasMany podemos estabelecer o relacionamento belongsTo na tabela relacionada. Esse passo pode ser importante se pretendemos recuperar dados a partir dos registros da tabela que relacionada tabela que estabeleceu o hasOne ou HasMany. Seguindo o exemplo exposto em hasOne, a tabela Perl do Usurio pertence a tabela Usurio. Ou seja, um perl inscrito na tabela Perl do Usurio pertence a um usurio pertencente tabela Usurio. class Perfil extends AppModel { var $name = 'Perfil'; var $belongsTo = array('Usuario'); }
Exemplo de uso de belongsTo

Curso de CakePHP da 2km interativa!

11 of 20

2.3.1.2.4 - hasAndBelongsToMany (HABTM) Quando um modelo pode ter diversos resultados associados de outro modelo e vice-versa necessrio utilizar o relacionamento do tipo hasAndBelongsToMany. Neste caso, ser necessrio criar uma tabela intermediria na estrutura do banco de dados. O nome dessa nova tabela dever conter o nome das duas tabelas relacionadas em ordem alfabtica e separadas por underscore (_). O nome das chaves estrangeiras deve seguir o padro do CakePHP. Em nosso exemplo, um usurio pode pertencer em diversas comunidades. E, ao mesmo tempo, uma comunidade pode possuir diversos usurios. Ento o nome da nossa tabela seria comunidades_usuarios e o nome dos campos na tabela intermediria seria respectivamente id, comunidade_id e usuario_id. class Usuario extends AppModel { var $name = 'Usuario'; var $hasAndBelongsToMany = array( 'Comunidade' => array( 'className' => 'Comunidade', 'joinTable' => 'usuarios_comunidades', 'foreignKey' => 'usuario_id', 'associationForeignKey' => 'comunidade_id', 'unique' => true ) ); }
Exemplo de hasAndBelongsToMany

2.3.1.3 - Recuperando dados 2.3.1.3.1 - nd nd($type, $params) $type - pode receber os valores 'all', 'rst', 'list', 'neighbors', 'count' ou 'threaded'. O valor padro utilizado o 'rst'. $params - trata-se de um array que pode possuir os seguintes parmetros: array( //array de condies 'conditions' => array('Modelo.campo' => $thisValue), //valor inteiro 'recursive' => 1, //array contendo o nome dos campos da tabela a ser recuperadas 'fields' => array('Modelo.campo1', 'Modelo.campo2'), //string ou array que define a ordem dos resultados 'order' => array('Modelo.created', 'Modelo.campo3 DESC'), //campos para serem usados no GROUP BY 'group' => array('Modelo.campo'),

Curso de CakePHP da 2km interativa!

12 of 20

//valor inteiro 'limit' => n, //valor inteiro 'page' => n, )


Parmetros do array $params

Se estiver sendo usado $type do tipo list, o campo $key no array $params ir denir o ndice e o valor. // gera uma lista contendo Usuario.email como ndice e Usuario.nome como valor $this->Post->find('list', array('fields'=>array('Usuario.email', 'Usuario.nome')));
Exemplos do $type list

2.3.1.3.2 - ndAllBy ndAllBy<eldName>(string $value) Atravs deste mtodo possvel procurar por certo campo da tabela. Para isso basta adicionar o nome do campo no formato CamelCase logo aps o ndAllBy. O parmetro $value deve ser uma string com o critrio da busca. $this->Usuario->findAllByComunidade('Hackers'); 2.3.1.3.3 - query Atravs desse mtodo do Modelo possvel fazer requisies ao banco de dados de forma customizada. Neste caso recomendvel utilizar a biblioteca Sanitize para prevenir ataques do tipo injection e cross-site scripting. $this->Produto->query("SELECT preco, cor FROM produto LIMIT 100;"); 2.3.1.4 - Salvando dados 2.3.1.4.1 - save save(array $data = null, boolean $validate = true, array $eldList = array()) $data: array contendo os dados a serem salvos, tendo como ndice os nomes dos campos onde estes dados devero ser salvos. $boolean: se for atribuido o valor true, o mtodo save ir validar os dados antes de salv-lo. As regras de validao podem ser montadas no array $validate no prprio Modelo. $eldList: os campos onde os dados devero ser salvos. Depois que os dados foram salvos, pode-se acessar o valor do id pode ser recuperado no atributo $id do objeto do modelo. 2.3.1.4.2 - saveAll saveAll(array $data = null, array $options = array())

Curso de CakePHP da 2km interativa!

13 of 20

Esse mtodo pode ser utilizado para salvar dados de um modelo ou, alm de salvar os dados do modelo, gravar os dados nos seus modelos relacionados. No parmetro $options pode ser usado os seguintes opes: Chave validate Descrio Se atribuido false no ocorre validao. Se atribudo true, cada registro validado antes de serem salvos. Se atribudo rst todos os dados so validados antes de ser salvo. Se for atribudo only os dados so apenas validados e no salvos.

atomic

Se for atribudo true o CakePHP ir tentar salvar todos os registros em uma transao nica. Se o banco de dados no der suporte a transao nica, dever ser usado false. O valor padro true.

eldList

array com o nome dos campos onde os dados sero salvos

Chaves do parmetro $options

2.3.1.4.3 - create create(array $data = array()) Esse mtodo utilizado para gravar um novo registro. Se, ao pedir para criar um novo registro com esse mtodo, o modelo estiver com o parmetro $data populado com dados, ento estes sero utilizados para criar o novo registro. 2.3.1.5 - Apagando dados 2.3.1.5.1 - del del(int $id = null, boolean $cascade = true); Apaga o registro identicado pelo parmetro $id. Por padro apaga os registros relacionados a ele. Se uma categoria de produto for apagada, por padro o CakePHP ir apagar todos os produtos relacionados essa categoria. 2.3.1.5.2 - deleteAll deleteAll(mixed $conditions, $cascade = true, $callbacks = false) Funciona igual a del e remove. A nica diferena que pode-se estabelecer condies, no formato de fragmentos de uma query, no parmetro $conditions. 2.3.1.6 - Callbacks 2.3.1.6.1 - beforeFind beforeFind(mixed $queryData) Esse callback chamado antes que alguma operao de nd seja chamada. O parmetro $queryData contm informaes sobre a query atual (condies, campos, etc.). Se este mtodo retornar false a operao de busca no ir ocorrer.

Curso de CakePHP da 2km interativa!

14 of 20

2.3.1.6.2 - afterFind afterFind(array $results, bool $primary) Esse callback utilizado para introduzir lgica aps uma operao de nd. importante para tratar dados como alterar datas ou valores retornados pela busca. Os resultados da busca podem ser acessados atravs do parmetro $results. Este mtodo dever retornar o resultado da busca com os valores alterados. 2.3.1.6.3 - beforeValidate beforeValidate() Esse callback utilizado para alterar alguma validao ou inserir lgica antes da validao ocorrer. Se esse callback retornar false a validao no ir ocorrer. 2.3.1.6.4 - beforeSave beforeSave() Esse callback utilizado para inserir lgica antes do dados serem salvos e logo aps os dados serem validados. importante para alterar algum formato de data que precise ser armazenado de forma diferente no banco de dados. 2.3.1.6.5 - afterSave afterSave(boolean $created)

Callback utilizado para inserir lgica depois que um registro foi salvo. O parmetro $created ir ser true se um novo registro foi criado, ser false se tiver ocorrido uma operao de atualizao.
2.3.1.6.6 - beforeDelete beforeDelete() Se for necessrio inserir alguma lgica antes de apagar um registro, esta deve ser posta neste callback. Ela dever retornar o valor true se pretende-se que a deleo ocorra e false em caso contrrio. 2.3.1.6.7 - afterDelete afterDelete() Se for necessrio inserir qualquer lgica depois de apagar um registro, esta lgica deve ser inserida nesse callback.

2.3.2 - A camada de controle


A camada de controle usada para gerenciar a lgica da sua aplicao. Na maioria das vezes um controle ir gerenciar a lgica de um modelo. Os arquivos de controle devem ser salvos dentro do diretrio app/controllers/. Todo controle herda da classe appController que por sua vez herda da classe Controller. A classe appController encontra-se no arquivo app/app_controller.php. Os mtodos criados nesta classe cam disponveis para todos os controles da aplicao. A classe Controller, por sua vez, uma biblioteca padro do CakePHP. class UsuarioController extends AppController { function edit($id = null) {

Curso de CakePHP da 2km interativa!

15 of 20

//aes desse mtodo vem aqui } function delete($id) { //aes desse mtodo vem aqui } } 2.3.2.1 - Atributos da camada de Controle 2.3.2.1.1 - name Este parmetro deve se usado para garantir que a aplicao seja compatvel com php verso 4. O valor de $name deve ser igual ao nome do controle. var var var var var $name = 'Usuarios'; $components = array('Email'); $helpers = array('Html','Form','Ajax'); $uses = array('Usuarios', 'Perfis'); $layout = 'default';

2.3.2.1.2 - components Esse atributo utilizado quando se precisa usar um componente no controle. Os componentes so bibliotecas do CakePHP que trazem funcionalidades camada de controle. 2.3.2.1.3 - helpers Esse atributo utilizado quando se precisa usar um helper no controle. Geralmente helpers so bibliotecas do CakePHP que trazem funcionalidades na camada de viso. Embora sua importncia resida na camada de viso, eles devem ser importados na camada de controle. 2.3.2.1.4 - uses As vezes existe a necessidade de se usar outros modelos que no aquele relacionado com o controller. Nestes casos, necessrio utilizar esse atributo para selecionar um ou mais modelos diferentes. 2.3.2.1.5 - layout Esse atributo utilizado para selecionar qual view (tela de apresentao gerada na camada de viso) ser utilizada. Neste caso, o CakePHP ir procurar no diretrio /app/views/layouts pelo arquivo atribudo a esse atributo. O nome que deve ser atribuido a layout dever ser o nome do arquivo menos a sua extenso, no caso .ctp. Caso no seja utilizado esse atributo, o CakePHP ir procurar por /app/views/layouts/default.ctp. 2.3.2.1.6 - pageTitle Esse atributo utilizado para trocar o ttulo da pgina. Entenda-se como ttulo da pgina o texto que utilizado entre as tags title na linguagem de marcao de texto. class NoticiasController extends AppController { function apresenta() { $this->pageTitle = 'Notcias';

Curso de CakePHP da 2km interativa!

16 of 20

} } 2.3.2.1.7 - params $this->params Esse atributo fornece acesso aos parametros da requisio atual. muito utilizado para obter informaes sobre informaes que foram enviadas atravs dos mtodos POST ou GET. 2.3.2.1.8 - data $this->data Armazena os dados enviadas da camada de viso para a camada de controle atravs do FormHelper. class UsuariosController extends AppController { function apresenta() { if(isset($this->data['Usuario']['nome'])) { echo $this->data['Usuario']['nome']; } } } 2.3.2.2 - Mtodos da camada de Controle 2.3.2.2.1 - set set(string $var, mixed $value) Atravs desse mtodo possvel enviar dados para a camada de viso. Tambm possvel passar um array como parmetro. Por exemplo: $this->set($nomes). $this->set('usuarios', $this->Usuario->find('all')); 2.3.2.2.2 - render render(string $action, string $layout, string $le) Esse mtodo sempre chamado no m de todo mtodo de um controle. Atravs dele denido qual arquivo de viso ser embutido dentro do layout. Se render no utilizado explicitamene no mtdo do controle, ento o controle ir procurar por uma tela com mesmo nome da ao do controle. Por exemplo, no mtodo list do controle usuario o render por padro iria procurar pelo arquivo /app/views/usuario/list.ctp. possvel especicar outra viso atravs de $action. Se $this->autoRender estiver atribudo com o valor false, no m do controle no ir ser executado esse mtodo. Se pretende-se ler um elemento, deve-se escrever o seguinte cdigo: $this->render('/elements/ajax'), que ir procurar pelo arquivo app/views/elements/ajax.ctp. 2.3.2.2.3 - redirect redirect(string $url, integer $status, boolean $exit)

Curso de CakePHP da 2km interativa!

17 of 20

Utilizado para redirecionar o usurio para outra view. O parmetro $url deve conter um caminho relativo no padro de url do CakePHP. O parmetro $status permite denir o estado da requisio HTTP. Pode-se, por exemplo, atribuir o valor 404, que corresponde a erro na busca do arquivo. Se for atribudo o valor false ao parmetro exit, o mtodo no vai executar a funo exit() aps executada. if($success) { $this->redirect(array('controller' => 'vendas', 'action' => 'sucesso')); } else { $this->redirect(array('controller' => 'vendas', 'action' => 'insucesso')); } 2.3.2.2.4 - ash ash(string $message, string $url, integer $pause) O mtodo ash similar ao redirect. A nica diferena a possibilidade de mostrar uma mensagem ao usurio antes dele ser redirecionado pgina. No parmetro $message deve-se atribuir a mensagem que deseja-se mostrar ao usurio antes que este seja redirecionado para a url denida no parmetro $url. No parmetro $pause dene-se o tempo (em segundos) de exposio da mensagem. 2.3.2.2.5 - referer Retorna a url que foi utilizada para chegar requisio atual. Veja o exemplo a seguir: class UsuariosController extends AppController { function admin_view($id = null) { echo $this->referer(); } } 2.3.2.2.6 - paginate Esse mtodo utilizado para gerar paginao dos resultados. Pode-se utilizar as chaves conditions, elds, order, limit. Da mesma forma como se faz no mtodo nd. class NoticiasController extends AppController { var $paginate = array( 'conditions' => 'Noticia.canal_id = 2' 'fields' => array('Noticia.titulo', 'Noticia.manchete'), 'limit' => 4, 'order' => array( 'Noticia.criada' => 'asc' ) ); } 2.3.2.3 - Callbacks 2.3.2.3.1 - beforeFilter Esta funo executada antes de qualquer ao do controller. importante utiliz-la para inspecionar a existncia de alguma varivel de sesso ou vericar se o usurio possui permisses de acesso.

Curso de CakePHP da 2km interativa!

18 of 20

2.3.2.3.2 - beforeRender Esta funo executada depois da ao do controller e antes da viso ser renderizada. 2.3.2.3.3 - afterFilter Este callback chamado depois que uma ao no controller executada. 2.3.2.3.4 - afterRender Chamada depois que uma ao renderizada.

2.3.3 - A camada de viso


Essa camada responsvel de gerar a interface com o cliente. Na maioria das vezes o resultado dessa camada ser um arquivo de extenso XHTML, mas possvel tambm gerar arquivos de RSS. possvel gerar tambm arquivos de extenso CSV. Os arquivos da viso so salvos com a extenso .ctp e escritos em php. A extenso ctp quer dizer CakePhp Template. Esses arquivos possuem toda a lgica para receber os dados enviados pela camada de controle e apresent-los para o usurio. Os arquivos de viso so salvos no diretrio app/views, dentro de uma pasta com o nome do controle que est relacionado. O nome do arquivo deve ser o nome da ao que a viso vai apresentar com extenso .ctp. Por exemplo, O arquivo de viso da ao de adicionar um produto do controle produto deve ser salvo no seguinte arquivo app/views/produto/adicionar.ctp A camada de viso composto de trs partes distintas: layout, elements e helpers.

Layouts so arquivos de viso que iro abrigar diversos arquivos da aplicao. A maioria dos arquivos de viso so renderizadas dentro de um arquivo de layout. Elements so pequenos pedaos de cdigo que podem ser reusados em diversos lugares da aplicao. Geralmente so renderizados dentro de uma view. Helpers fornecem lgica para os arquivos de viso. Atravs de helpers o CakePHP fornece formas fceis de se construir formulrios, aplicaes Ajax, paginao, RSS, dentre diversas outras funcionalidades.
2.3.3.1 - Layouts O layout contm cdigo de apresentao que abriga os arquivos de viso. Tudo que se deseja ver em uma viso deve ser posto dentro de um arquivo de layout. Os arquivos de layout so postos dentro do diretrio /app/views/layouts. Por padro o CakePHP ir procurar pelo arquivo /app/views/layouts/default.ctp para renderizar os arquivos de viso dentro deste arquivo. Entretanto, possvel sobrescrever esse arquivo. Um arquivo de layout deve conter uma regio destinada para carregar os arquivos de viso. Isto feito atravs da funo $content_for_layout. Pode-se tambm denir o ttulo da tela atravs de $title_for_layout. Para incorporar arquivos externos ao arquivo de layout, deve-se utilizar a funo $scripts_for_layout e denir o nome dos arquivos que sero importados. Ao invs de denir o ttulo da viso em layout possvel denir no prprio arquivo de controle atravs de $this->layout. O mesmo ocorre com o ttulo, que pode ser utilizado $this->pageTitle no arquivo de controle para denir o ttulo da tela. Para ver um exemplo de arquivo de layout abra o arquivo /app/views/layouts /default.ctp do CakePHP.
Exemplo de uso de $this->pageTitle e $this->layout no arquivo de controle

Curso de CakePHP da 2km interativa!

19 of 20

class UsuariosController extends AppController { function mostrarAlternativo() { $this->pageTitle = ':: Home ::'; $this->layout = 'alternativo'; } function mostrarPadrao() { $this->layout = 'padrao'; } } Alm do layout padro que o default o CakePHP tambm fornece o ajax que adequado para renderizar telas com recursos ajax e o layout e o ash que til quando ir se lidar com mensagens enviadas via mtodo ash. 2.3.3.2 - Elements Muitas aplicaes possuem partes da apresentao que precisam ser repetidas em diversas partes. Para isso existe o element. Geralmente essas partes da apresentao podem ser um menu, formulrios de login, caixas de ajuda, dentre diversos outros exemplos. Um elemento pode ser visto como um mini-arquivo de viso que embutido dentro de um arquivo de viso, layouts e mesmo dentro de outro arquivo element. Arquivos desse tipo so salvos dentro do diretrio /app/views/elements/ e utilizam a extenso .ctp.
Exemplo de como importar um Element

echo $this->element('helpbox'); 2.3.3.2.1 - Passando variveis dentro de um elemento possvel passar dados para um elemento atravs do segundo parmetro. $this->element('caixaDeMensagem',array("mensagem" => "nononoo nononoon")); Neste exemplo, dentro de element, a varivel $mensagem caria disponvel com o valor "nononoo nononoon". Alm de dados, a funo element tambm fornece as opes cache e plugin. 2.3.3.3 - Usando os Helpers bsicos O CakePHP carrega automaticamente os helpers Html e Form. Estes helpers so os mais utilizados no desenvolvimento de uma aplicao. // Gerando uma imagem com o helper / HTML gerado $html->image('nome_da_imagem.jpg',array('alt'=>'Texto alternativo para a imagem')); <img src="/bookmarks/img/nome_da_imagem.jpg" alt="Texto alternativo para a imagem"/> // Gerando um Link com o helper / HTML gerado $html->link('texto do link','/bookmarks/add', array('class'=>'nomeDaClasseCss')); <a href="/caminhoRelativo" class="nomeDaClasseCss">texto do link</a> // Gerando um input com o helper de Form / HTML gerado $form->input('Usuario.senha',array('type'=>'password')); <input type="password" id="UsuarioSenha" value="" maxlength="32" name="data[Usuario] [senha]">

Curso de CakePHP da 2km interativa!

20 of 20

Potrebbero piacerti anche