18 de Outubro de 2007 às 15:06
· Categorias: CakePHP
Olá pessoal,
esta dica é bem valiosa e foi mais um problema enfrentado durante a programação do meu projeto para a faculdade. No meu projeto o usuário pode enviar N imagens para o sistema de uma só vez. N imagens porque o campo file de envio é criado com JS de acordo com a necessidade e vontade do usuário.
A primeira coisa que pensamos é fazer o seguinte:
PHP:
-
foreach($imagens as $imagem){
-
$img["Imagem"]["nome"] = $imagem;
-
$this->Imagem->save($img);
-
-
}
Legal, logicamente parece estar correto. Mas o que o Cake faz? Isso mesmo, ele cria um registro e os outros ele altera esse primeiro. Por quê? Porque a chave primária está preenchida.
A solução é bem simples, basta fazer isso:
PHP:
-
foreach($imagens as $imagem){
-
$img["Imagem"]["nome"] = $imagem;
-
-
$this->Imagem->id = null;
-
$this->Imagem->save($img);
-
-
}
Setar o id da imagem (ou do model) como null. Este id após alguma inserção fica preenchido com o código autoincremento do último save. Sendo que o Cake dá um insert quando o mesmo é null e um update caso contrário.
Bom é isso...
Qualquer dúvida, comentem!
Abraços e até a próxima...
Link Permanente
15 de Outubro de 2007 às 17:04
· Categorias: CakePHP
Olá pessoal,
hoje passei por mais um problema no meu projeto por ele não usar a padronização do Cake no banco.
Como vocês devem saber o Cake popula automaticamente campos nomeados com CREATED, MODIFIED e UPDATED, sendo data de criação no primeiro e alteração nos dois últimos.
Pois bem, no meu projeto, que não segue o padrão do Cake tive que usar o callback do model, o beforeSave. O qual é executado antes do save do model e após a validação dos dados.
O código ficou assim dentro do meu model:
PHP:
-
function beforeSave(){
-
if (!
isset($this->
data["Model"]["CampoChavePrimária"])){
-
$this->
data["Model"]["CampoCriadoEm"] =
date('Y-m-d H:i:s');
-
}
-
$this->
data["Model"]["CampoModificadoEm"] =
date('Y-m-d H:i:s');
-
return true;
-
}
Onde:
- Model - seu model
- CampoChavePrimaria - o campo chave primária da sua tabela que persiste o model
- CampoCriadoEm - o campo que armazena a data de criação do registro
- CampoModificadoEm - o campo que armazena a data de alteração do registro
Observe que o beforeSave retorna true, somente quando isso ocorre que é efetuado o save no banco.
Isso pode ser usado em outras situações, daà vai da criatividade, como criptografar a senha para guardar no banco e por aà vai...
Qualquer dúvida, comentem!
Até a próxima!
Link Permanente
12 de Outubro de 2007 às 19:15
· Categorias: CakePHP
Olá pessoal,
estou desenvolvendo meu projeto deste ano da faculdade em CakePHP e uma coisa que ainda não havia pensado em fazer era o compartilhamento dos arquivos MVC's.
No meu projeto, estou compartilhando os models entre as 4 aplicações que fazem parte do mesmo sistema. Então, como fazer?
A primeira coisa que fiz para acelerar as coisas foi mapear o banco, mas nisso já se foram aproximadamente 40 classes models
, se eu copiasse e colasse nas outras partes do projeto, resultaria em 160 classes e com certeza em muita dor de cabeça para mantê-las sincronizadas.
A solução: bootstrap.php!
O arquivo bootstrap é carregado automaticamente depois que o arquivo app/webroot/index.php e depois que o bootstrap.php (nÃvel núcleo do Cake) é carregado. É usado para adicionar qualquer função que não for usada numa classe, pode ser usado também para dar um include/require em qualquer arquivo da sua aplicação.
No meu caso que queria adicionar um diretório para os models, então usei, nas minhas demais aplicações (tal como app2, app3 e etc):
PHP:
-
$modelPaths =
array(ROOT.DS.
"app".DS.
"models".DS
);
Assim, sempre será buscado (também) os models em: /app/models/. Lembrando que DS é o directory separator, que no windows é \ e no linux é / e ROOT representa o caminho fÃsico da instalação do Cake.
Para usar com views e controllers é a mesma configuração, mas usando:
PHP:
-
$controllerPaths =
array(ROOT.DS.
"app".DS.
"controllers".DS
);
-
-
$viewPaths =
array(ROOT.DS.
"app".DS.
"views".DS
);
Qualquer dúvida, comentem!
Até a próxima pessoal!
Link Permanente
28 de Setembro de 2007 às 15:28
· Categorias: CakePHP, JQuery, JavaScript, Úteis
Olá pessoal,
intediado com o helper do cake que trabalha com prototype? Eu também...
Então resolvi criar (inicialmente para uso próprio) o JAX - jQuery Ajax Helper. Que funciona de forma bem semelhante ao helper nativo do cake, mas com algumas melhorias...
O código pode ser visto abaixo: (e baixado aqui)
PHP:
-
/*
-
JAXHelper - CakePHP Helper for Ajax with jQuery
-
Author: Tulio Faria (www.tuliofaria.net)
-
Requeriments:
-
- jquery: http://docs.jquery.com/Downloading_jQuery
-
- jform (for some features like observeForm): http://jquery.com/plugins/project/form
-
Using:
-
- include jquery.js and jquery.form.js in your view (yes, using plain html or html helper
)
-
- include the helper Jax in your controller
-
- call any of methods available: link, observeField and observeForm
-
*/
-
-
class JaxHelper extends Helper {
-
-
var $helpers =
array("Html");
-
-
function link($text,
$url,
$target,
$options =
null,
$loading =
null){
-
-
$url = $this->Html->url($url);
-
$att = " ";
-
-
-
-
foreach($options as $k=>$v){
-
$att.=$k.'="'.$v.'" ';
-
}
-
-
}
-
-
echo "<a id="\
" href="http:
//www.tuliofaria.net/%5C%22$url%5C%22">$text</a>";
-
echo $this->_jsBlock
("\$(\"#$aId\").click( function(){ \$.post(\"$url\", function(data){
-
\$(\"$target\").html(data); }); return false; }); ");
-
}
-
function observeField($element, $options){
-
$event = $options["event"];
-
$update = $options["update"];
-
$url = $this->Html->url($options["url"]);
-
-
$code = $options["loading"].'
-
$.ajax({
-
type: "POST",
-
url: "'.$url.'",
-
data: $("'.$element.'").serialize(),
-
success: function(data){
-
$("'.$update.'").html(data);
-
'.$options["complete"].'
-
}
-
});
-
';
-
-
return $this->_jsBlock($this->_addReady("\$(\"$element\").$event(function(){ $code })"));
-
}
-
-
function observeForm($element, $options){
-
$event = $options["event"];
-
$update = $options["update"];
-
$url = $this->Html->url($options["url"]);
-
-
$code = '$("'.$element.'").ajaxSubmit({
-
target: \''.$update.'\',
-
beforeSubmit: function(){'.$options["loading"].'},
-
success: function(){'.$options["complete"].'}
-
}
-
);';
-
-
return $this->_jsBlock($this->_addReady("\$(\"$element\").$event(function(){ $code return false; })"));
-
}
-
-
function _jsBlock($content){
-
return "<script type="\">$content</script>";
-
}
-
function _addReady($content){
-
return "\$(function(){ $content } );";
-
}
-
-
function test(){
-
echo $this->_jsBlock
($this->_addReady
("alert(\"Jax Helper has been installed and ready to use!\");"));
-
}
-
}
-
?>
Exemplos:
Link:
PHP:
-
link("Click Here!",
"/contatos/info/1/",
"teste",
"teste");
?>
Observe field:
PHP:
-
$options["event"] = "change";
-
$options["update"] = "#teste";
-
$options["url"] = "/contatos/info/1/";
-
$options["loading"] = "$('#loading').fadeIn('slow');$('#teste').hide();";
-
$options["complete"] = "$('#teste').fadeIn('slow');$('#loading').fadeOut();";
-
echo $jax->
observeField("#texto",
$options);
?>
ObserveForm:
PHP:
-
$options["event"] = "submit";
-
$options["update"] = "#teste";
-
$options["url"] = "/contatos/info/1/";
-
$options["loading"] = "$('#loading').fadeIn('slow');$('#teste').hide();";
-
$options["complete"] = "$('#teste').fadeIn('slow');$('#loading').fadeOut();";
-
-
echo $jax->
observeForm("#testando",
$options);
?>
Em breve publicarei exemplos mais decentes de uso.
Qualquer sugestão ou dúvida, comente!
Abraços,
Link Permanente
28 de Agosto de 2007 às 23:17
· Categorias: CakePHP
[update 24/09/2007]
Olá pessoal,
o evento foi cancelado por tempo indeterminado. Não sei ao certo o que ocorreu... Sei que estava bastante animado, bom, de qualquer maneira, outras oportunidades irão aparecer... Long live CakePHP!
[/update]Â
Olá pessoal,
dia 26 de Setembro irá acontecer em São José do Rio Preto - SP o Primeiro Encontro InfoSoft de Software Livre. No evento, os congressistas terão a oportunidade de assistir palestras de vários assuntos, dentre eles Ruby on Rails e CakePHP, que por sinal será realizada por mim.
Quem quiser mais informações, acesse: InfoSoft

Abraços pessoal,
Link Permanente
7 de Agosto de 2007 às 16:08
· Categorias: CakePHP
Olá pessoal,
no último sábado (04/08/2007), inclusive meu aniversário
, aconteceu o evento sobre frameworks PHP.
Eu conferi as palestras sobre CakePHP com o Elton Minetto e a de Symfony com o Jhony.
Sobre a palestra de CakePHP o Elton deu um show, e creio que muita gente que assistiu sua palestra, senão já desenvolvia com Cake, vai começar. Muito bem fundamentada, explicou alguns conceitos básicos que o pessoal confunde ao começar, como MVC.
Já a palestra de Symfony, faltou um pouco mais de experiência no framework por parte do Jhony. Eu senti ele meio perdido. Creio que o pessoal poderia ter escolhido alguém da comunidade Symfony brasileira... Bom, mas isso é apenas uma crÃtica construtiva...
Infelizmente não pude ficar até o fim, mas gostei do evento. Lá pude conhecer pessoalmente o Bill do CakePHP.com.br e o Silici0, ambos gente boa demais.
Seguem algumas fotos (fotos tiradas pelo Bill):

Abraços pessoal,
quem quiser comentar com o que achou sobre o evento, sinta-se a vontade...
Link Permanente
26 de Julho de 2007 às 16:05
· Categorias: Blog, CakePHP
No momento de escolher um framework, todo mundo sente aquele friozinho na barriga. Bom, creio que está notÃcia vai diminuir e muito essa sensação.
O Mambo CMS um dos mais conhecidos gerenciadores de conteúdo open source atualmente, recentemente anunciou que sua versão 5 será desenvolvida em CakePHP. Isso trará muitos benefÃcios na hora de integrar soluções ao Mambo, deixando-o mais flexÃvel.
Veja o anúncio completo: Baking Mambo .
Abraços e Long Live CakePHP!
Link Permanente
23 de Julho de 2007 às 17:18
· Categorias: Blog, CakePHP
E aà pessoal!
O evento sobre Frameworks de desenvolvimento com PHP está chegando, e você já fez sua inscrição?
Senão fez não perca essa oportunidade de conhecer os três frameworks mais usados atualmente (Cake, Zend e Symfony) além de bater um papo com quem já desenvolve usando-os.
Eu estarei por lá, quem quiser bater um papo é só me procurar (tente me achar pelo crachá de identificação), que será um prazer fazer novas amizades. Aliás, será bem interessante conhecer os leitores do meu blog lá...
Para saber mais sobre o evento:
Tempo Real Eventos
ou Aqui!
Abraços pessoal e até lá!
Link Permanente
19 de Julho de 2007 às 12:04
· Categorias: CakePHP, Código Fonte, Úteis
Olá pessoal,
no último vÃdeo tutorial, vimos como fazer para salvar relacionamentos hasAndBelongsToMany usando a tag select multiple.
Este helper faz a mesma coisa, mas gerando uma lista de checkboxes.
Baixe o código fonte.
USO:
Supondo o nosso caso do blog:
PHP:
-
<? echo $htmlExt->
checkboxes("Categoria/Categoria",
$categorias,
"
-
<ul>", "</ul>
-
", "
-
<li>", "</li>
-
"); ?>
Lembrando que deve-se adicionar o HtmlExt no atributo $helpers do controller e salvar o arquivo html_ext.php (sem o s no final) em /app/views/helpers/
Qualquer dúvida ou melhoria, comentem!
Abraços e até a próxima.
Link Permanente
18 de Julho de 2007 às 12:15
· Categorias: CakePHP, VÃdeo Tutoriais
Olá pessoal,
neste vÃdeo tutorial iremos continuar o projeto do blog com o salvamento do relacionamento entre Posts e Categorias que é do tipo hasAndBelongsToMany. Lembrando que o relacionamento hasAndBelongsToMany é equivalente ao muitos para muitos em banco de dados.
Assista agora!
Qualquer dúvida ou segestão comentem!
Abraços pessoal e até a próxima...
Link Permanente