Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
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
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.
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.
/app/cong/
Onde cam os arquivos de congurao. O arquivo de congurao de banco de dados (database.php) se encontra aqui.
/app/models
/app/controllers
/app/views
/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.
3 of 20
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
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
5 of 20
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
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, universidade, disciplinas associados e os professores associados a disciplina.
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.'
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'));
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'));
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
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
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
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'),
12 of 20
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())
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
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.
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.
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';
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)
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.
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.
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
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]">
20 of 20