Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1+
Fundamentos
Daniel Glez-Pea
Daniel Glez-Pea
2bi!ados en app/Model"
&epresentan un 5ni!o re'istro de una tabla re'istro a!ti$o en !ada momento, !on
a!!eso para leer6es!ribir la !olumna del ob,eto 7a!ti$o8"
+todos
read(...)" #ee un re'istro de la base de datos que a1ora ser9 el re'istro a!ti$o"
.,emplos b9si!os"
.liminar
// Crear (create + save): id no establecido o es null
$this->Recipe->create();
$this->Recipe->save(array("name"=>"spaguetti carbonara"));
// Actualizar un registro (establecer id + save)
$this->Recipe->id = 2;
$this->Recipe->save(array("name"=>"spaguetti carbonara"));
// Actualizar varios registros: updateAll(campos, condiciones)
$this->Recipe->updateAll(array("approved => true), array("name LIKE"
=> "%spaguetti%"));
//Eliminar un registro
$this->Recipe->delete($id);
//Eliminar varios registros
$this->Recipe->deleteAll(array("name" => "spaguetti carbonara"));
Daniel Glez-Pea
&e!uperar
#os modos m9s b9si!os /e=isten m9s ( se pueden definir propios0 son%
7all8" &e!uperar todas las filas que !umplan las !ondi!iones" De$uel$e un arra(
aso!iati$o, a'rupando primero por n5mero de fila, lue'o por tabla /a $e!es una
!onsulta tiene $arias tablas0 ( lue'o por !ampo"
&ela!iones"
.n fun!in del tipo de rela!in /;%;, ;%:, :%;, :%+0, se debe usar
un atributo distinto"
.se atributo es, !omo m>nimo, el nombre del otro modelo rela!ionado"
3e pueden indi!ar $arias rela!iones del mismo tipo, empleando un arra("
&ela!iones /))0"
.,emplo
<?php
class User extends AppModel {
public $name = 'User';
public $hasMany = 'Comment';
}
//Resultado de $this->User->find()
Array
(
[User] => Array
(
[id] => 121
[name] => Gwoo the Kungwoo
[created] => 2007-05-01 10:31:01
)
[Comment] => Array
(
[0] => Array
(
[id] => 123
[user_id] => 121
[title] => On Gwoo the Kungwoo
[body] => The Kungwooness is not so Gwooish
[created] => 2006-05-01 10:31:01
)
[1] => Array
(
[id] => 124
[user_id] => 121
[title] => More on Gwoo
[body] => But what of the Nut?
[created] => 2006-05-01 10:41:01
)
)
)
+i no se de#ine, se asume
,ue las cla(es #or-neas se
nom%ran as."
<tablaRelacionada>_id
Daniel Glez-Pea
&ela!iones /)))0"
?alida!in"
2bi!ados en app/Controller"
Controladores ( +odelos"
Controladores ( ?istas"
Pa'esController /pa'es0"
-ppController
-l'unos !omponentes"
3essions"
Por e,emplo, setFlash(), que permite meter mensa,es temporales en sesin /e,% 7produ!to
p dado de alta !orre!tamente80" Ctil para implementar P@3*-&.D)&.C*-G.*" .n el P@3* se
e,e!uta setFlas1, ( en el G.* la plantilla renderizar9 el mensa,e flas1 una sla $ez, mediante
el SessionHelper::flash.
-ut1enti!ation /-ut10"
#as $istas son fi!1eros PHP /!on e=tensin "!tp0" *>pi!amente H*+# !on PHP
in!rustado"
2bi!adas en /app/View/<Controlador>/<accion.ctp>
Por defe!to, la $ista se !orresponde !on la a!!in del !ontrolador e,e!utada" 3in
embar'o, el !ontrolador puede emplear otra $ista si lo desea, simplemente
in$o!ando $this->render()
<?php
class PostsController extends AppController {
public $helpers = array('Html', 'Form');
<?php
// Render the element in /View/Elements/ajaxreturn.ctp
$this->render('/Elements/ajaxreturn');
Daniel Glez-Pea
.,emplo de $ista
<!-- File: /app/View/Posts/index.ctp -->
<h1>Blog posts</h1>
<table>
<tr>
<th>Id</th>
<th>Title</th>
<th>Created</th>
</tr>
<!-- Recorremos $posts, que ha sido establecido mediante set en el controlador -->
<?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>
Daniel Glez-Pea
CakePHP define un me!anismo para or'anizar las partes !omunes en las $istas"
3e basa en ?iew 4lo!ks /desde !akePHP <";0, #a(outs, ?iews ( .lements"
View Blocks" Definen 7slots7 que se insertan en un sitio /'eneralmente el #a(out0, pero
se rellena desde otras partes /t>pi!amente las ?iews0"
.l blo!k por defe!to es 7!ontent7, que es donde se inserta el !ontenido renderizado por ?iew que no
sea de otro blo!k"
@tros blo!ks predefinidos son 7meta8, 7!ss8, 7s!ript8, que permite que las $istas definan meta-ta's,
1o,as de estilos ( s!ripts" Para rellenar esos bloques se puede utilizar HtmlHelper, que tiene una
fun!in para aadir !ontenido a !ada uno"
3uele ser 1abitual que los element requieran de l'i!a de ne'o!io /e,% un element que
!ar'a los produ!tos m9s !omprados ( que forman parte de la plantilla 'lobal0"
Para llamar a una a!!in dire!tamente desde un element, se debe usar $this-
>requestAction() en el element"
3ele!!ionan el !omponente $isual m9s ade!uado en fun!in del tipo de dato de la base de datos"
-(udan en la $alida!in b9si!a" +uestran los errores de $alida!in estable!idos en los modelos"
.stable!en $alores por defe!to /5til para formularios de edi!in de un re'istro de la 4D0"
#os $alores por defe!to de los !ampos se pueden estable!er pre$iamente desde el
!ontrolador en Ft1is-Grequest-Gdata
<?php
echo $this->Form->create(); //Modelo por defecto, el del controlador
actual
echo $this->Form->input('username'); //text
echo $this->Form->input('password'); //password
echo $this->Form->input('approved'); //day, month, year, hour, minute,
meridian
echo $this->Form->input('quote'); //textarea
echo $this->Form->end('Add'); //incluye un botn de submit
Daniel Glez-Pea
.,emplo% /recipes/index.json
.,emplo%
class BooksController extends AppController{
public $components = array('RequestHandler');
public $helpers = array('Js', 'Html');
function index(){
$this->set("books", array("quijote", "divina comedia"));
$this->set("_serialize", array("books"));
}
}
<?
echo $this->Html->script('jquery');
//ATENCION DESCARGAR jquery y ponerlo en /app/webroot/js/jquery.js
?>
<input type="button" id="boton" value="test!"></input>
<?
$this->Js->get("#boton");
$this->Js->event(
'click',
$this->Js->request(
array('action' => 'index', 'controller'=>'links','ext'=>'json'),
array('async' => true,'success'=>alert(data['books'))
)
);
echo $this->Js->writeBuffer(); // Write cached scripts
?>
Router::parseExtensions("json");
6app6Confi'6routes"p1p
6app6Controller64ooksController"p1p
6app6?iew64ooks6inde="!tp
Daniel Glez-Pea
3e !onfi'ura en app6Confi'6routes"p1p
http://host/<controlador>/<accion>/<p1>/<p2>