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.6+ (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

Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...JaenFrankcezco
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasosSoni BM
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan phpCarlos Zantana
 
Evidencia: Sesión Virtual Funciones PHP
Evidencia: Sesión Virtual Funciones PHPEvidencia: Sesión Virtual Funciones PHP
Evidencia: Sesión Virtual Funciones PHPSebastián Joya
 
Configurar entorno Android
Configurar entorno AndroidConfigurar entorno Android
Configurar entorno Androidjubacalo
 
Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterandrewzg
 
Evidencia sesión virtual “funciones php”
Evidencia sesión virtual “funciones php”Evidencia sesión virtual “funciones php”
Evidencia sesión virtual “funciones php”JOANSAGO
 
Jose manuel avila gonzález
Jose manuel avila gonzálezJose manuel avila gonzález
Jose manuel avila gonzálezJose Avila
 
Jose manuel avila gonzález
Jose manuel avila gonzálezJose manuel avila gonzález
Jose manuel avila gonzálezJose Avila
 
jQuery Mobile :: Cuadros de diálogo
jQuery Mobile :: Cuadros de diálogojQuery Mobile :: Cuadros de diálogo
jQuery Mobile :: Cuadros de diálogojubacalo
 
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesJoomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesdeivit86
 
deSymfony 2013 - Creando aplicaciones web desde otro ángulo con Symfony y A...
deSymfony 2013 -  Creando aplicaciones web desde otro ángulo con Symfony y A...deSymfony 2013 -  Creando aplicaciones web desde otro ángulo con Symfony y A...
deSymfony 2013 - Creando aplicaciones web desde otro ángulo con Symfony y A...Pablo Godel
 
Pleased to meet you, Laravel
Pleased to meet you, LaravelPleased to meet you, Laravel
Pleased to meet you, LaravelRolando Caldas
 
Curso TIC de PHP y MSQL
Curso TIC de PHP y MSQLCurso TIC de PHP y MSQL
Curso TIC de PHP y MSQLWilian
 

La actualidad más candente (20)

Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
Introduccion, Instalacion, Configuracion e Implementacion Framework ZanPHP IT...
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasos
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan php
 
Composer: Gestionando dependencias en PHP
Composer: Gestionando dependencias en PHP Composer: Gestionando dependencias en PHP
Composer: Gestionando dependencias en PHP
 
Asp.net
Asp.netAsp.net
Asp.net
 
Evidencia: Sesión Virtual Funciones PHP
Evidencia: Sesión Virtual Funciones PHPEvidencia: Sesión Virtual Funciones PHP
Evidencia: Sesión Virtual Funciones PHP
 
Configurar entorno Android
Configurar entorno AndroidConfigurar entorno Android
Configurar entorno Android
 
Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniter
 
Evidencia sesión virtual “funciones php”
Evidencia sesión virtual “funciones php”Evidencia sesión virtual “funciones php”
Evidencia sesión virtual “funciones php”
 
Jose manuel avila gonzález
Jose manuel avila gonzálezJose manuel avila gonzález
Jose manuel avila gonzález
 
Jose manuel avila gonzález
Jose manuel avila gonzálezJose manuel avila gonzález
Jose manuel avila gonzález
 
Primefaces
PrimefacesPrimefaces
Primefaces
 
jQuery Mobile :: Cuadros de diálogo
jQuery Mobile :: Cuadros de diálogojQuery Mobile :: Cuadros de diálogo
jQuery Mobile :: Cuadros de diálogo
 
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesJoomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
 
Rails intro
Rails introRails intro
Rails intro
 
deSymfony 2013 - Creando aplicaciones web desde otro ángulo con Symfony y A...
deSymfony 2013 -  Creando aplicaciones web desde otro ángulo con Symfony y A...deSymfony 2013 -  Creando aplicaciones web desde otro ángulo con Symfony y A...
deSymfony 2013 - Creando aplicaciones web desde otro ángulo con Symfony y A...
 
Tutorial ASP .NET
Tutorial ASP .NETTutorial ASP .NET
Tutorial ASP .NET
 
Pleased to meet you, Laravel
Pleased to meet you, LaravelPleased to meet you, Laravel
Pleased to meet you, Laravel
 
Curso TIC de PHP y MSQL
Curso TIC de PHP y MSQLCurso TIC de PHP y MSQL
Curso TIC de PHP y MSQL
 
4.Programación con PHP y MySQL
4.Programación con PHP y MySQL4.Programación con PHP y MySQL
4.Programación con PHP y MySQL
 

Similar a Intro a cakephp

Taller introduccion symfony2
Taller introduccion symfony2Taller introduccion symfony2
Taller introduccion symfony2Mario IC
 
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
 
Vue + Typescript: Decorators vs. Extend, Fight!
Vue + Typescript: Decorators vs. Extend, Fight!Vue + Typescript: Decorators vs. Extend, Fight!
Vue + Typescript: Decorators vs. Extend, Fight!Sara Lissette L. Ibáñez
 
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
 
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
 
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
 

Similar a Intro a cakephp (20)

Taller introduccion symfony2
Taller introduccion symfony2Taller introduccion symfony2
Taller introduccion symfony2
 
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
 
Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
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
 
Vue + Typescript: Decorators vs. Extend, Fight!
Vue + Typescript: Decorators vs. Extend, Fight!Vue + Typescript: Decorators vs. Extend, Fight!
Vue + Typescript: Decorators vs. Extend, Fight!
 
Concurrencia en Java
Concurrencia en Java Concurrencia en Java
Concurrencia en Java
 
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
 
Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2Mis primeros pasos con Symfony 2
Mis primeros pasos con Symfony 2
 
Turbogears
TurbogearsTurbogears
Turbogears
 
Django
DjangoDjango
Django
 
Webpack desde cero
Webpack desde ceroWebpack desde cero
Webpack desde cero
 
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...
 

Último

Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxgustavovasquezv56
 
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendidaLuis Francisco Reyes Aceves
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfYanitza28
 
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptxAVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptxdulcemonterroza
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
QUINTA SEXTA GENERACION de COMPUTADORAS
QUINTA  SEXTA GENERACION de COMPUTADORASQUINTA  SEXTA GENERACION de COMPUTADORAS
QUINTA SEXTA GENERACION de COMPUTADORASMarc Liust
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfYanitza28
 
10°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-810°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-8antoniopalmieriluna
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfaxelv9257
 
Función del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionFunción del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionEmanuelMuoz11
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...axelv9257
 

Último (18)

Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
 
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdf
 
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptxAVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
QUINTA SEXTA GENERACION de COMPUTADORAS
QUINTA  SEXTA GENERACION de COMPUTADORASQUINTA  SEXTA GENERACION de COMPUTADORAS
QUINTA SEXTA GENERACION de COMPUTADORAS
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdf
 
10°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-810°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-8
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
 
Función del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionFunción del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacion
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...
 

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.6+ (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.