Dica: testando o Cake mesmo sem o mod_rewrite

Um dos grandes problemas quando se está começando com CakePHP é ele trabalhar com o mod_rewrite do htaccess do apache. Sendo assim em outros servidores, ele não funcionaria.

Para contornar isso, pode-se usar o acesso direto ao arquivo que dispara todas as ações no Cake.

Por exemplo, para acessar: http://localhost/cake/posts/ seria acessado: http://localhost/cake/index.php?url=/posts/

ou http://localhost/cake/posts/ler/1 seria acessado como: http://localhost/cake/index.php?url=/posts/ler/1

Até a próxima pessoal! Dúvidas? Comentem!

Comentários (14)

Dica: validando mais de um model em uma mesma requisição antes de salvar

Provavelmente, você já deve ter pensando em fazer um cadastro de alguma informação, onde, de uma vez só cadastrasse informações sobre dois Models.

Uma maneira rápida seria:

PHP:
  1. if($this->Model1->save($this->data)&&$this->Model2->save($this->data)) {
  2. $this->flash('Dados salvos.', '/');
  3. }

Esta solução até que funciona bem. Caso não tenhamos relação entre os Models. Ou seja, seria bem improvável que os mesmos seriam salvos em um mesmo lugar sem ter nenhuma relação. Se percebemos bem ainda teremos outro problema, caso desejamos validar os dados dos dois Models antes de salvar qualquer um deles. Já que nesse caso, se o Model1 for salvo, já é inserido os dados no banco, mesmo que o save do Model2 falhe.

Uma alternativa interessante seria:

PHP:
  1. $v1 = $this->Model1->validates($this->data);
  2.  
  3. $v2$this->Model2->validates($this->data);
  4.  
  5. if($v1&&$v2) {
  6.  
  7. $this->Model1->save($this->data);
  8.  
  9. $this->data["Model2"]["model1_id"] = $this->Model1->getLastInsertId();
  10.  
  11. $this->Model2->save($this->data);
  12.  
  13. $this->flash('Dados salvos.', '/');
  14. }

Assim, primeiro validamos os dois models, e somente se passar pelas duas validações, inserimos os dados no banco. Mantendo assim a consistência dos dados. Poderíamos também já pegar a chave estrangeira e colocar no outro model, com getLastInsertId.

Podemos usar tranqüilamente o tagErrorMsg no view, que ele irá funcionar, pois o validates se encarregará disso.

Abraços pessoal e até a próxima. Dúvidas? Comentem!

Comentários (4)

Vídeo Tutorial: CakePHP - criando um novo post e integração com TinyMCE

Olá pessoal,

desculpem a demora, mas finalmente consegui fazer mais um vídeo tutorial.

Neste vídeo tutorial, continuaremos com a parte administrativa do blog, agora com a criação de um novo post e a integração do TinyMCE.

Os links usados no blog são:

Using TinyMCE with CakePHP (http://bakery.cakephp.org/articles/view/60) (site com o código do element criado no vídeo tutorial)
TinyMCE (site oficial) (site onde deve-se baixar o TinyMCE usado no vídeo)

Para simplificar, caso você não queira ir a padaria para pegar o código do element, aqui vai ele: :)

PHP:
  1. link("tinymce/jscripts/tiny_mce/tiny_mce.js"));
  2. ?>
  3. <script type="text/javascript" language="javascript">
  4. <?php if($preset = "basic")
  5. {
  6. $options = '
  7. mode : "textareas",
  8. theme : "advanced",
  9. theme_advanced_buttons1 : "bold,italic,underline,separator,justifyleft,justifycenter,justifyright, justifyfull,bullist,numlist,undo,redo,link,unlink",
  10. theme_advanced_buttons2 : "",
  11. theme_advanced_buttons3 : "",
  12. theme_advanced_toolbar_location : "top",
  13. theme_advanced_toolbar_align : "left",
  14. theme_advanced_path_location : "bottom",
  15. extended_valid_elements : "a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
  16. content_css : "/css/'.$this->layout.'.css"
  17. ';
  18. }
  19. ?>
  20.  
  21. tinyMCE.init({<?php echo($options); ?>});
  22. </script>

E para usá-lo:

PHP:
  1. renderElement('tinymce',array('preset' => 'basic')); ?>

Assista agora!

Dúvidas? Comentem!

Abraços, e até a próxima.

Comentários (16)