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
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;
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
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
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
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