Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Intro a cakephp

Betabeers
December 01, 2011

Intro a cakephp

Andy Dawson @AD7six

Betabeers

December 01, 2011
Tweet

More Decks by Betabeers

Other Decks in Education

Transcript

  1. 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
  2. ¿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)
  3. Los problemas de los frameworks • Estructura • Falta de

    flexibilidad • Complejidad • Tiempo para aprender • Rendimiento • Hay muchos - ¿cómo elejir?
  4. 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)
  5. 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
  6. Ficheros y carpetas • ROOT ◦ app ▪ Controler ▪

    Model ▪ View ▪ weboot • css • js ◦ lib ▪ Cake ◦ plugins ◦ vendors
  7. Ficheros y carpetas • ROOT ◦ app ▪ Controler ▪

    Model ▪ View ▪ weboot • css • js ◦ lib ▪ Cake ◦ plugins ◦ vendors La estructura es una "convención" - Se puede mover fácilmente
  8. 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]uit What would you like to Bake? (D/M/V/C/P/F/T/Q) >
  9. Primeros pasos: Prototipo Como hacer el blog-tutorial en 15 segundos

    1. Cargar sql en BBDD 2. Generar controlador 3. Ver resultado
  10. 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());
  11. 2) Generar Controllador [andy@work:~/www/apps/cakephp(2.0)]$ Console/cake bake Controller Posts Welcome to

    CakePHP v2.0.4 Console --------------------------------------------------------------- App : cakephp Path: /home/andy/www/apps/cakephp/ --------------------------------------------------------------- Baking controller class for Posts... Creating file /home/andy/www/apps/cakephp/Controller/PostsController.php Wrote `/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.php Wrote `/home/andy/www/apps/cakephp/Test/Case/Controller/PostsControllerTest.php`
  12. Un Controlador de Scaffolding <?php // Controller/PostsController.php App::uses('AppController', 'Controller'); /**

    * Posts Controller * */ class PostsController extends AppController { /** * Scaffold * * @var mixed */ public $scaffold; }
  13. 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
  14. Siguiente Fase: Bake MVC Como hacer el blog-tutorial en 15

    segundos. Otra vez. 1. Cargar sql en BBDD 2. Generar MVC 3. Ver resultados
  15. 2) Generar MVC [andy@work:~/www/apps/cakephp(2.0)]$ Console/cake bake all Post -q Baking

    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
  16. No es dinámico <?php // Controller/PostsController.php App::uses('AppController', 'Controller'); /** *

    Posts Controller */ class PostsController extends AppController { /** * index method */ public function index() { $this->Post->recursive = 0; $this->set('posts', $this->paginate()); } ...
  17. 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> ...
  18. 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>
  19. 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
  20. 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
  21. La razón - un modelo flaco <?php // Model/Post.php App::uses('AppModel',

    'Model'); /** * Post Model * */ class Post extends AppModel { }
  22. Añadir validación (con Bake) <?php App::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...' ), ...
  23. 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
  24. 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
  25. Explorando en mas detalle • Mensajes de error útiles •

    Debug Kit - un gran ayuda • Otras comandos de la consola
  26. Explorando en mas detalle • Mensajes de error útiles •

    Debug Kit - un gran ayuda • Otras comandos de la consola • Projectos útiles/ejemplos
  27. Proyectos interesantes • http://croogo.org- Blog/CMS • http://my.candycane.jp - Issue tracker

    • http://cakepackages.com - Plugin index • Mark Story Asset Compress
  28. 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