Intro a cakephp

576 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
576
On SlideShare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Intro a cakephp

  1. 1. CakePHPßetaBeers Valencia, 01/12/2011
  2. 2. Sobre mi● Andy Dawson● @AD7six● Blogger infrequente AD7six.com● Desarrollador desde 1999● PHP desde 2005● CakePHP ○ desde 2005 ○ Autor de muchos plugins ○ Miembro del equipo core de CakePHP
  3. 3. Tecnologías y Herramientas
  4. 4. Tecnologías y Herramientas
  5. 5. ¿Por que usar un framework?● Estructura● Se concentra en implementar la aplicación● Evita problemas comunes● Consigue un código reutilizable● Se beneficia del conocomiento de otros desarolladores● Desarrollo Rápido (RAD)
  6. 6. Los problemas de los frameworks● Estructura● Falta de flexibilidad● Complejidad● Tiempo para aprender● Rendimiento● Hay muchos - ¿cómo elejir?
  7. 7. CakePHP en breve● Convención sobre Configuración● Estructura MVC● Fácil de usar, rápido de aprender● RAD prototyping (scaffolding)● Generdor de código (bake)● unit test (phpunit)● Gran cantidad de plugins publicados● Gran comunidad● versión 1.3, php 4.3.2+● versión 2.0, php 5.2.9+ (y pdo)
  8. 8. Como Empezar● Principal: http://cakephp.org● Repo: http://github.com/cakephp/cakephp● Docs: http://book.cakephp.org/2.0/● El grupo google: cakephp-esp● Irc: Freenode #cakephp-es
  9. 9. Bienvenido a CakePHP
  10. 10. Ficheros y carpetas● ROOT ○ app ■ Controler ■ Model ■ View ■ weboot ● css ● js ○ lib ■ Cake ○ plugins ○ vendors
  11. 11. Ficheros y carpetas● ROOT ○ app ■ Controler ■ Model ■ View ■ weboot ● css ● js ○ lib ■ Cake La estructura es una ○ plugins "convención" - Se puede ○ vendors mover fácilmente
  12. 12. Bake - un generador de todo[andy@work:~/www/apps/cakephp(2.0)]$ Console/cake bake---------------------------------------------------------------Interactive Bake Shell---------------------------------------------------------------[D]atabase Configuration[M]odel[V]iew[C]ontroller[P]roject[F]ixture[T]est case[Q]uitWhat would you like to Bake? (D/M/V/C/P/F/T/Q)>
  13. 13. Primeros pasos: PrototipoComo hacer el blog-tutorial en 15 segundos1. Cargar sql en BBDD2. Generar controlador3. Ver resultado
  14. 14. 1) SQL/* First, create our posts table: */CREATE TABLE posts ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, title VARCHAR(50), body TEXT, created DATETIME DEFAULT NULL, modified DATETIME DEFAULT NULL);/* Then insert some posts for testing: */INSERT INTO posts (title,body,created) VALUES (The title, This is the post body., NOW());INSERT INTO posts (title,body,created) VALUES (A title once again, And the post body follows., NOW());INSERT INTO posts (title,body,created) VALUES (Title strikes back, This is really exciting! Not., NOW());
  15. 15. 2) Generar Controllador[andy@work:~/www/apps/cakephp(2.0)]$ Console/cake bake Controller PostsWelcome to CakePHP v2.0.4 Console---------------------------------------------------------------App : cakephpPath: /home/andy/www/apps/cakephp/---------------------------------------------------------------Baking controller class for Posts...Creating file /home/andy/www/apps/cakephp/Controller/PostsController.phpWrote `/home/andy/www/apps/cakephp/Controller/PostsController.php`Bake is detecting possible fixtures...Baking test case for Posts Controller ...Creating file /home/andy/www/apps/cakephp/Test/Case/Controller/PostsControllerTest.phpWrote `/home/andy/www/apps/cakephp/Test/Case/Controller/PostsControllerTest.php`
  16. 16. 3) Ver Resultados
  17. 17. Un Controlador de Scaffolding<?php// Controller/PostsController.phpApp::uses(AppController, Controller);/** * Posts Controller * */class PostsController extends AppController {/** * Scaffold * * @var mixed */ public $scaffold;}
  18. 18. Puntos de interés● Definir BBDD -> generar código● Si no existe un modelo - Cake usará un modelo genérico● Es todo dinámico - no hay código para modificar● Útil mientras el diseño de la BBDD no esté definido
  19. 19. ¿Cambios en la BBDD?ALTER TABLE postsADD COLUMN published TINYINT(1) DEFAULT 0AFTER body;
  20. 20. Las vistas se adaptan
  21. 21. Siguiente Fase: Bake MVCComo hacer el blog-tutorial en 15 segundos.Otra vez.1. Cargar sql en BBDD2. Generar MVC3. Ver resultados
  22. 22. 2) Generar MVC[andy@work:~/www/apps/cakephp(2.0)]$ Console/cake bake all Post -qBaking model class for Post...Baking controller class for Posts...Baking test case for Posts Controller ...Baking `index` view file...Baking `view` view file...Baking `add` view file...Baking `edit` view file...Bake All complete
  23. 23. 3) Ver Resultados
  24. 24. Diferencias con ScaffoldingAhora hay:Controller/PostsController.phpModel/Post.phpTest/Case/Controller/PostsControllerTest.phpTest/Fixture/PostFixture.phpView/Posts/add.ctpView/Posts/edit.ctpView/Posts/index.ctpView/Posts/view.ctp
  25. 25. No es dinámico<?php// Controller/PostsController.phpApp::uses(AppController, Controller);/** * Posts Controller */class PostsController extends AppController {/** * index method */ public function index() { $this->Post->recursive = 0; $this->set(posts, $this->paginate()); } ...
  26. 26. Contiene ejemplos de uso<?php // View/Posts/edit.ctp ?><div class="posts form"><?php echo $this->Form->create(Post);?> <fieldset> <legend><?php echo __(Edit Post); ?></legend> <?php echo $this->Form->input(id); echo $this->Form->input(title); echo $this->Form->input(body); echo $this->Form->input(published); ?> </fieldset><?php echo $this->Form->end(__(Submit));?></div>...
  27. 27. Se puede hacer aun más sencillo <?php // View/Posts/edit.ctp ?> <div class="posts form"> <?php echo $this->Form->create(); echo $this->Form->inputs(); echo $this->Form->end(); ?> </div>
  28. 28. Puntos de interés● Cuidado con bake en modo no-interactivo, sobrescribe ficheros sin confirmar● Scaffolding y el código de bake son visualmente iguales● Usa Scaffolding si es útil para ti - o salta directamente a código que puedas tocar.● Pero usa bake - ahorra mucho tiempo
  29. 29. Modelos - clases importantes● "Fat Models, Skinny Controllers" es un dicho al que hay que hacer caso● Es mejor llena los modelos con logica, no los controlladores● Ejemplo - validación
  30. 30. Sin validación - GIGO
  31. 31. La razón - un modelo flaco<?php// Model/Post.phpApp::uses(AppModel, Model);/** * Post Model * */class Post extends AppModel {}
  32. 32. Añadir validación (con Bake)<?phpApp::uses(AppModel, Model);class Post extends AppModel { public $displayField = title; public $validate = array( title => array( notempty => array( rule => array(notempty), message => Escribe un titulo, por favor ), minlength => array( rule => array(minlength, 10), message => Un poquito mas... ), ...
  33. 33. Resultados con validación
  34. 34. Puntos de interés● Las vistas (el ayudante formulario) conocen automáticamente las reglas de validación● Hay muchas reglas de validación en el core● Es fácil escribir tus proprias reglas de validación● Las reglas se puede desactivar o modificar
  35. 35. Resumen de bake● Se usa para generar projectos, ficheros/clases o todo a la vez● Interactivo o no● Dinámico (Scaffolding) o no● Las plantillas de cada clase se puede modificar● Detecta relaciones en la BBDD● El código se adapta a las relaciones● No es obligotario usarlo
  36. 36. Explorando en mas detalle● Mensajes de error útiles
  37. 37. Ejemplo mensaje de error
  38. 38. Explorando en mas detalle● Mensajes de error útiles● Debug Kit - un gran ayuda
  39. 39. Debug Kit - installado
  40. 40. Debug Kit - Session data
  41. 41. Debug Kit - Query Log
  42. 42. Debug Kit - Timer 26 (ms)
  43. 43. Explorando en mas detalle● Mensajes de error útiles● Debug Kit - un gran ayuda● Otras comandos de la consola
  44. 44. La consola
  45. 45. Explorando en mas detalle● Mensajes de error útiles● Debug Kit - un gran ayuda● Otras comandos de la consola● Projectos útiles/ejemplos
  46. 46. Proyectos interesantes● http://croogo.org- Blog/CMS● http://my.candycane.jp - Issue tracker● http://cakepackages.com - Plugin index● Mark Story Asset Compress
  47. 47. Explorando en más detalle● Mensajes de error útiles● Debug Kit - un gran ayuda● Otras comandos de la consola● Projectos utiles/ejemplos● Para leer: CakePHP 1.3 Application Cookbook - Mariano Iglesias 2011
  48. 48. ¿Preguntas? http://slideshare.net/AD7six/intro-a-cakephp

×