CakePHP es un framework PHP que permite el desarrollo rápido de aplicaciones web siguiendo el patrón MVC. Organiza la aplicación en modelos, vistas y controladores para separar la lógica de negocio de la interfaz de usuario. Los modelos interactúan con la base de datos, los controladores contienen la lógica y envían datos a las vistas, y las vistas se encargan de mostrar la información al usuario. CakePHP también gestiona automáticamente el enrutamiento de URLs y las relaciones entre modelos.
5. RRRRoooouuuuttttiiiinnnngggg
> CakePHP gestiona automáticamente routing
http://uri-aplicacion/posts/index
URL de la aplicación Controlador Acción
/path-root-aplicación
/path-root-aplicación/app/Controller/PostsController.php
/path-root-aplicación/app/View/Posts/index.ctp
6. MMMMooooddddeeeelllloooo
/* Archivo /app/Model/Post.php
class Post extends AppModel {
}
> CakePHP gestiona el modelo automáticamente
> Primera letra en mayúscula (es una clase)
> El modelo interactúa con la base de datos
> Métodos implícitos de acceso a BBDD
7. CCCCoooonnnnttttrrrroooollllaaaaddddoooorrrr
/* Archivo /app/Controller/PostsController.php
class PostsController extends AppController {
public $helpers = array(“Html”, “Form”);
public function index() {
$this->set('posts', $this->Post->find('all')));
}
}
> El nombre ha de llevar el sufijo “Controller”
> El controlador contiene la lógica de negocio
> Utiliza el modelo para procesar la info
> Envía el resultado a la vista para pintarlo
8. AAAAcccccccciiiióóóónnnn
/* Archivo /app/Controller/PostsController.php
class PostsController extends AppController {
public $helpers = array(“Html”, “Form”);
public function index() {
Ejecuta el
método find() del
modelo
SELECT * FROM posts
Acción “index”
$this->set('posts', $this->Post->find('all')));
}
El resultado
de la consulta
se guarda en la
variable 'posts'
y lo envía a la vista
}
> Cada método del controlador es una acción
> Cada acción está ligada a una vista
> Con this, cakePHP nos pone en contacto con
la vista y el modelo
9. VVVViiiissssttttaaaa
<!-- Archivo /app/View/Posts/index.ctp -->
<h1>Blog posts</h1>
<table><tr>
<th>Id</th>
<th>Title</th>
<th>Created</th>
</tr>
Variable enviada
por el controlador
en la acción Variable que
recoge cada registro
<?php foreach ($posts as $post): ?>
<tr>
<td><?php echo $post[’Post’][’id’]; ?></td>
<td>
<?php echo $this->Html->link($post[’Post’][’title’],
array(’controller’ => ’posts’, ’action’ => ’view’, $post[’Post’][’id’])); ?>
</td>
<td><?php echo $post[’Post’][’created’]; ?></td>
</tr>
<?php endforeach; ?>
<?php unset($post); ?>
</table>
Campos Prepara la URI
para la acción
'view'
11. MMMMooooddddeeeelllloooossss
<!-- Archivo /app/Models/Delegacione.php -->
<?php
App::uses('AppModel', 'Model');
class Delegacione extends AppModel {
public $name = 'Delegacione';
public $hasMany = array('Sucursale'=>
array('className'=>'Sucursale',
'foreignKey'=>'delegacion_id',
'order'=>'Sucursale.nom_sucursal ASC'));
public function listar() {
return $this->find('all');
}
public function buscarDelegacion($delegacion) {
return $this->findAllByNomDelegacion($delegacion);
}
public function buscar($id) {
return $this->findAllById($id);
}
}
<!-- Archivo /app/Models/Sucursale.php -->
<?php
App::uses('AppModel', 'Model');
class Sucursale extends AppModel {
public $name = "Sucursale";
public $belongsTo = array('Delegacione'=>
array('className'=>'Delegacione',
'foreignKey'=>'delegacion_id'));
}
De forma automática,
CakePHP se asocia a la tabla
por convención de nombre:
la tabla en plural y el modelo
en singular
De forma implícita, el modelo
incluye e implementa métodos
de lectura y escritura a la base
de datos.
Una vez definidas las
relaciones entres los modelos,
éstas quedan vinculadas
para todas las consultas
12. CCCCoooonnnnttttrrrroooollllaaaaddddoooorrrr
<?php
/* Fichero app/Controller/DelegacionesController.php
App::uses('AppController', 'Controller');
class DelegacionesController extends AppController {
public $helpers = array('Html', 'Form');
public function getDelegaciones() {
//$delegaciones = $this->Delegacione->listar();
//$delegaciones = $this->Delegacione->buscarDelegacion('Murcia');
$delegaciones = $this->Delegacione->buscar(2);
//$delegaciones = $this->Delegacione->query("SELECT * FROM Delegaciones WHERE
nom_delegacion='Valencia';");
//$delegaciones = $this->Delegacione->findAllByNomDelegacion('Murcia');
$this->set('delegaciones', $delegaciones);
}
}
Diferentes formas de invocar
al modelo para obtener
resultados
13. VVVViiiissssttttaaaa
<!-- Archivo app/View/Delegaciones/get_delegaciones.ctp
<h1>Delegaciones</h1>
<?php print_r($delegaciones); ?>
<table>
<tr>
<th>Id</th>
<th>Delegación</th>
<th>Sucursales</th>
</tr>
<?php foreach ($delegaciones as $delegacion): ?>
<tr>
<td><?php echo $delegacion['Delegacione']['id']; ?></td>
<td><?php echo $delegacion['Delegacione']['nom_delegacion']; ?></td>
<td>
<?php foreach($delegacion['Sucursale'] as $sucursal): ?>
<?php echo $sucursal['nom_sucursal'].'('.$sucursal['id'].')'; ?>
<?php unset($sucursal); ?>
<?php endforeach; ?>
</td>
</tr>
<?php endforeach; ?>
<?php unset($delegacion); ?>
</table>
Al vincularse la consulta y subconsulta,
la tabla principal contiene un campo
de tipo array, conteniendo la colección
de datos de la subconsulta, filtrando
por la foreign key
Muestra el resultado en crudo.