SlideShare una empresa de Scribd logo
1 de 49
Descargar para leer sin conexión
CakePHP
ßetaBeers Valencia, 01/12/2011
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
Tecnologías y Herramientas
Tecnologías y Herramientas
¿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)
Los problemas de los frameworks
●   Estructura
●   Falta de flexibilidad
●   Complejidad
●   Tiempo para aprender
●   Rendimiento
●   Hay muchos - ¿cómo elejir?
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)
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
Bienvenido a CakePHP
Ficheros y carpetas


● ROOT
  ○ app
    ■ Controler
    ■ Model
    ■ View
    ■ weboot
       ●   css
       ●   js
  ○ lib
     ■ Cake
  ○ plugins
  ○ vendors
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
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)
>
Primeros pasos: Prototipo


Como hacer el blog-tutorial en 15 segundos

1. Cargar sql en BBDD
2. Generar controlador
3. Ver resultado
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());
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`
3) Ver Resultados
Un Controlador de Scaffolding

<?php
// Controller/PostsController.php
App::uses('AppController', 'Controller');
/**
 * Posts Controller
 *
 */
class PostsController extends AppController {

/**
 * Scaffold
 *
 * @var mixed
 */
      public $scaffold;

}
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
¿Cambios en la BBDD?


ALTER TABLE
  posts
ADD COLUMN
  published TINYINT(1) DEFAULT 0
AFTER body;
Las vistas se adaptan
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
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
3) Ver Resultados
Diferencias con Scaffolding


Ahora hay:

Controller/PostsController.php
Model/Post.php
Test/Case/Controller/PostsControllerTest.php
Test/Fixture/PostFixture.php
View/Posts/add.ctp
View/Posts/edit.ctp
View/Posts/index.ctp
View/Posts/view.ctp
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());
       }

     ...
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>
...
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>
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
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
Sin validación - GIGO
La razón - un modelo flaco


<?php
// Model/Post.php
App::uses('AppModel', 'Model');
/**
 * Post Model
 *
 */
class Post extends AppModel {
}
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...'
         ),
    ...
Resultados con validación
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
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
Explorando en mas detalle


● Mensajes de error útiles
Ejemplo mensaje de error
Explorando en mas detalle


● Mensajes de error útiles
● Debug Kit - un gran ayuda
Debug Kit - installado
Debug Kit - Session data
Debug Kit - Query Log
Debug Kit - Timer




   26 (ms)
Explorando en mas detalle


● Mensajes de error útiles
● Debug Kit - un gran ayuda
● Otras comandos de la consola
La consola
Explorando en mas detalle


●   Mensajes de error útiles
●   Debug Kit - un gran ayuda
●   Otras comandos de la consola
●   Projectos útiles/ejemplos
Proyectos interesantes




●   http://croogo.org- Blog/CMS
●   http://my.candycane.jp - Issue tracker
●   http://cakepackages.com - Plugin index
●   Mark Story Asset Compress
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
¿Preguntas?
 http://slideshare.net/AD7six/intro-a-cakephp

Más contenido relacionado

La actualidad más candente

Gulp js php sevilla 28 septiembre 2016
Gulp js   php sevilla 28 septiembre 2016Gulp js   php sevilla 28 septiembre 2016
Gulp js php sevilla 28 septiembre 2016Agencia INNN
 
PowerShell para administradores
PowerShell para administradoresPowerShell para administradores
PowerShell para administradoresPablo Campos
 
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriverPrueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriverDavid Gómez García
 
Infografia empleados laravel
Infografia empleados laravelInfografia empleados laravel
Infografia empleados laravelFUNDET ECUADOR
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Edgar Dueñas
 
Deployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaDeployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaAgencia INNN
 
WP-CLI dispara tu productividad, simplifica tus rutinas
WP-CLI dispara tu productividad, simplifica tus rutinasWP-CLI dispara tu productividad, simplifica tus rutinas
WP-CLI dispara tu productividad, simplifica tus rutinasPablo Poveda Ortega
 
Testing con selenium
Testing con seleniumTesting con selenium
Testing con seleniummarianoshin
 
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Rodolfo Finochietti
 
Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesJobsket
 
Infografia farmacia laravel
Infografia farmacia laravelInfografia farmacia laravel
Infografia farmacia laravelFUNDET ECUADOR
 
Configurar entorno Android
Configurar entorno AndroidConfigurar entorno Android
Configurar entorno Androidjubacalo
 

La actualidad más candente (20)

Composer: Gestionando dependencias en PHP
Composer: Gestionando dependencias en PHP Composer: Gestionando dependencias en PHP
Composer: Gestionando dependencias en PHP
 
Semana 5 Angular Rutas y Controladores
Semana 5   Angular Rutas y ControladoresSemana 5   Angular Rutas y Controladores
Semana 5 Angular Rutas y Controladores
 
Gulp js php sevilla 28 septiembre 2016
Gulp js   php sevilla 28 septiembre 2016Gulp js   php sevilla 28 septiembre 2016
Gulp js php sevilla 28 septiembre 2016
 
PowerShell para administradores
PowerShell para administradoresPowerShell para administradores
PowerShell para administradores
 
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriverPrueba De Aplicaciones Web con Selenium 2 y WebDriver
Prueba De Aplicaciones Web con Selenium 2 y WebDriver
 
Infografia empleados laravel
Infografia empleados laravelInfografia empleados laravel
Infografia empleados laravel
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
 
MVC en CakePHP 2.0
MVC en CakePHP 2.0MVC en CakePHP 2.0
MVC en CakePHP 2.0
 
Deployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevillaDeployer PHP. Presentación para #PHPSevilla
Deployer PHP. Presentación para #PHPSevilla
 
WP-CLI dispara tu productividad, simplifica tus rutinas
WP-CLI dispara tu productividad, simplifica tus rutinasWP-CLI dispara tu productividad, simplifica tus rutinas
WP-CLI dispara tu productividad, simplifica tus rutinas
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Selenium
SeleniumSelenium
Selenium
 
Testing con selenium
Testing con seleniumTesting con selenium
Testing con selenium
 
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
Nuevas características para Desarrollo Web en Visual Studio 2012 y ASP.NET MVC 4
 
Como hacer de todo con PowerShell
Como hacer de todo con PowerShellComo hacer de todo con PowerShell
Como hacer de todo con PowerShell
 
Angular Conceptos Practicos 2
Angular Conceptos Practicos 2Angular Conceptos Practicos 2
Angular Conceptos Practicos 2
 
Introducción a Angular
Introducción a AngularIntroducción a Angular
Introducción a Angular
 
Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agiles
 
Infografia farmacia laravel
Infografia farmacia laravelInfografia farmacia laravel
Infografia farmacia laravel
 
Configurar entorno Android
Configurar entorno AndroidConfigurar entorno Android
Configurar entorno Android
 

Similar a Intro a cakephp

Consola Cake Php, Uso Y Testing
Consola Cake Php, Uso Y TestingConsola Cake Php, Uso Y Testing
Consola Cake Php, Uso Y Testingdriveros
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7Luis Ruiz Pavón
 
Test Unitarios y E2E front y Back
Test Unitarios y E2E front y BackTest Unitarios y E2E front y Back
Test Unitarios y E2E front y BackEric Zeidan
 
Exposicion Akelos
Exposicion AkelosExposicion Akelos
Exposicion Akelosdokeosla
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPHP Vigo
 
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesJoomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesdeivit86
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...Miguel Ángel Sánchez Chordi
 
Como preparar un buen pastel con CakePHP
Como preparar un buen pastel con CakePHPComo preparar un buen pastel con CakePHP
Como preparar un buen pastel con CakePHPJairo Serrano
 
Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Acquia
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsDavid Calavera
 
Jornadas Odoo 2016 - Cómo realizar un módulo de Odoo compatible con todo - Pe...
Jornadas Odoo 2016 - Cómo realizar un módulo de Odoo compatible con todo - Pe...Jornadas Odoo 2016 - Cómo realizar un módulo de Odoo compatible con todo - Pe...
Jornadas Odoo 2016 - Cómo realizar un módulo de Odoo compatible con todo - Pe...Pedro Manuel Baeza Romero
 
Infraestructura como código
Infraestructura como códigoInfraestructura como código
Infraestructura como códigoJuanje Ojeda
 

Similar a Intro a cakephp (20)

Consola Cake Php, Uso Y Testing
Consola Cake Php, Uso Y TestingConsola Cake Php, Uso Y Testing
Consola Cake Php, Uso Y Testing
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
 
Manualcake
ManualcakeManualcake
Manualcake
 
Test Unitarios y E2E front y Back
Test Unitarios y E2E front y BackTest Unitarios y E2E front y Back
Test Unitarios y E2E front y Back
 
Exposicion Akelos
Exposicion AkelosExposicion Akelos
Exposicion Akelos
 
Primeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigoPrimeros pasos Symfony PHPVigo
Primeros pasos Symfony PHPVigo
 
Concurrencia en Java
Concurrencia en Java Concurrencia en Java
Concurrencia en Java
 
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesJoomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 
Como preparar un buen pastel con CakePHP
Como preparar un buen pastel con CakePHPComo preparar un buen pastel con CakePHP
Como preparar un buen pastel con CakePHP
 
Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8
 
Iniciación Con CakePHP
Iniciación Con CakePHPIniciación Con CakePHP
Iniciación Con CakePHP
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y Rails
 
Turbogears
TurbogearsTurbogears
Turbogears
 
Django
DjangoDjango
Django
 
Jornadas Odoo 2016 - Cómo realizar un módulo de Odoo compatible con todo - Pe...
Jornadas Odoo 2016 - Cómo realizar un módulo de Odoo compatible con todo - Pe...Jornadas Odoo 2016 - Cómo realizar un módulo de Odoo compatible con todo - Pe...
Jornadas Odoo 2016 - Cómo realizar un módulo de Odoo compatible con todo - Pe...
 
Webpack desde cero
Webpack desde ceroWebpack desde cero
Webpack desde cero
 
spring-boot-es
spring-boot-esspring-boot-es
spring-boot-es
 
Infraestructura como código
Infraestructura como códigoInfraestructura como código
Infraestructura como código
 
Codeigniter101
Codeigniter101Codeigniter101
Codeigniter101
 

Más de betabeers

IONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataformaIONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataformabetabeers
 
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)betabeers
 
Blockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar LageBlockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar Lagebetabeers
 
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica MediavillaCloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica Mediavillabetabeers
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilónbetabeers
 
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito -  Jon Torrado - Betabeers BilbaoLa línea recta hacia el éxito -  Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbaobetabeers
 
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu appbetabeers
 
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)betabeers
 
Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)betabeers
 
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)betabeers
 
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)betabeers
 
Elemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de UsoElemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de Usobetabeers
 
Seguridad en tu startup
Seguridad en tu startupSeguridad en tu startup
Seguridad en tu startupbetabeers
 
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.betabeers
 
Buenas prácticas para la optimización web
Buenas prácticas para la optimización webBuenas prácticas para la optimización web
Buenas prácticas para la optimización webbetabeers
 
La magia de Scrum
La magia de ScrumLa magia de Scrum
La magia de Scrumbetabeers
 
Programador++ por @wottam
Programador++ por @wottamProgramador++ por @wottam
Programador++ por @wottambetabeers
 
RaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoTRaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoTbetabeers
 
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015betabeers
 
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015betabeers
 

Más de betabeers (20)

IONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataformaIONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataforma
 
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
 
Blockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar LageBlockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar Lage
 
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica MediavillaCloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito -  Jon Torrado - Betabeers BilbaoLa línea recta hacia el éxito -  Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
 
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
 
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
 
Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)
 
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
 
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
 
Elemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de UsoElemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de Uso
 
Seguridad en tu startup
Seguridad en tu startupSeguridad en tu startup
Seguridad en tu startup
 
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
 
Buenas prácticas para la optimización web
Buenas prácticas para la optimización webBuenas prácticas para la optimización web
Buenas prácticas para la optimización web
 
La magia de Scrum
La magia de ScrumLa magia de Scrum
La magia de Scrum
 
Programador++ por @wottam
Programador++ por @wottamProgramador++ por @wottam
Programador++ por @wottam
 
RaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoTRaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoT
 
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
 

Intro a cakephp

  • 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
  • 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. Los problemas de los frameworks ● Estructura ● Falta de flexibilidad ● Complejidad ● Tiempo para aprender ● Rendimiento ● Hay muchos - ¿cómo elejir?
  • 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. 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
  • 10. Ficheros y carpetas ● ROOT ○ app ■ Controler ■ Model ■ View ■ weboot ● css ● js ○ lib ■ Cake ○ plugins ○ vendors
  • 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. 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) >
  • 13. Primeros pasos: Prototipo Como hacer el blog-tutorial en 15 segundos 1. Cargar sql en BBDD 2. Generar controlador 3. Ver resultado
  • 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. 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`
  • 17. Un Controlador de Scaffolding <?php // Controller/PostsController.php App::uses('AppController', 'Controller'); /** * Posts Controller * */ class PostsController extends AppController { /** * Scaffold * * @var mixed */ public $scaffold; }
  • 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. ¿Cambios en la BBDD? ALTER TABLE posts ADD COLUMN published TINYINT(1) DEFAULT 0 AFTER body;
  • 20. Las vistas se adaptan
  • 21. 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
  • 22. 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
  • 24. Diferencias con Scaffolding Ahora hay: Controller/PostsController.php Model/Post.php Test/Case/Controller/PostsControllerTest.php Test/Fixture/PostFixture.php View/Posts/add.ctp View/Posts/edit.ctp View/Posts/index.ctp View/Posts/view.ctp
  • 25. 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()); } ...
  • 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. 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. 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. 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
  • 31. La razón - un modelo flaco <?php // Model/Post.php App::uses('AppModel', 'Model'); /** * Post Model * */ class Post extends AppModel { }
  • 32. 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...' ), ...
  • 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. 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. Explorando en mas detalle ● Mensajes de error útiles
  • 38. Explorando en mas detalle ● Mensajes de error útiles ● Debug Kit - un gran ayuda
  • 39. Debug Kit - installado
  • 40. Debug Kit - Session data
  • 41. Debug Kit - Query Log
  • 42. Debug Kit - Timer 26 (ms)
  • 43. Explorando en mas detalle ● Mensajes de error útiles ● Debug Kit - un gran ayuda ● Otras comandos de la consola
  • 45. Explorando en mas detalle ● Mensajes de error útiles ● Debug Kit - un gran ayuda ● Otras comandos de la consola ● Projectos útiles/ejemplos
  • 46. Proyectos interesantes ● http://croogo.org- Blog/CMS ● http://my.candycane.jp - Issue tracker ● http://cakepackages.com - Plugin index ● Mark Story Asset Compress
  • 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.