Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 37

Cakephp Framework

Ing. Sergio Jiménez Martínez


sjimenez@unisimonbolivar.edu.co
Introducción a Cakephp

• CakePHP (v. 4.4)  es un framework de desarrollo web que funciona


con PHP 8.1 (min. PHP 7.4). Es una estructura de librerías, clases y
una infraestructura run-time (en tiempo de ejecución) para
programadores de aplicaciones web originalmente inspirado en el
framework Ruby On Rails, utiliza el patrón MVC
• CakePHP pone tu disposición todas las herramientas que necesita
para empezar a programar lo que realmente hay que hacer: la
lógica específica de tu aplicación. En lugar de reinventar la rueda
cada vez que te sientas a hacer un nuevo proyecto, obten una
copia de CakePHP y empieza con el verdadero corazón de tu
aplicación.
Características de Cakephp
• Licencia flexible
• Compatible con las versiones de PHP 7.4 y superiores.
• Contiene CRUD para la interacción de la base de datos.
• Andamiaje de código.
• Generación automática de código.
• Arquitectura MVC
• URLs personalizadas
• Función de Validación.
Características de Cakephp
• Plantillas rápidas y flexibles (La sintaxis de PHP, con ayudantes).
• Ayudantes para AJAX, JavaScript, formularios HTML y más.
• Componentes de Email, Cookie, Seguridad, Sesión y otros.
• ACL flexible.
• Sanitización de Datos.
• Poderoso Caché.
• Localización e Internacionalización.
• Funciona desde cualquier directorio de sitios web, con poca o ninguna
configuración adicional.
Ciclo de una petición CakePHP
Ciclo de una petición CakePHP
Instalación de Cakephp
Requerimientos
• Servidor HTTP. Por ejemplo: Apache. mod_rewrite es recomendado, pero no requerido.
• PHP 7.4 o mayor.
• extensión mbstring.
En el archivo php.ini Se debe des
• extensión intl. comentar
• extensión PDO quitar el ‘;’
•  extensión SimpleXML
CakePHP soporta una gran variedad 
de sistemas de bases de datos:
• MySQL (5.1.10 o mayor).
• PostgreSQL.
• Microsoft SQL Server (2008 o mayor).
• SQLite 3.
Instalación de Cakephp OP1 Linea comandos
Ejecuta estos comando:
1. prueba en tu consola esto :  php --version, Si no reconoce el comando entonces le das la ruta de tu
php así  set path=C:\xampp\php

2. En la consola ubicado en la ruta C:\xampp\htdocs, escribe este código 


php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') ===
'55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer
verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

©
Crear el primer proyecto
En la consola ubicado en la ruta C:\xampp\htdocs, Ejecuta este comando

php composer.phar create-project --prefer-dist cakephp/app crudcake


Donde crudcake es el nombre del proyecto nuevo que vas a crear
Después de muchas operaciones te pide que autorices permiso a la carpeta tmp,
le das y
Validar que instaló en cakephp

http://localhost/crudcake/
Estructura de directorios de Cakephp

Para una tabla Categorías


Algunas Convenciones de Cakephp
Modelo: La tabla se escribe “siempre en plural” y el “modelo en singular”
posts -> post.php

Controlador: “Siempre en plural”, y se agrega “Controller” al archivo y nombre


de la clase
class PostsController -> PostController.php
Las clases se escriben en formato CamelCased
Ejemplo CRUD -MER
Ejemplo CRUD Tablas en SQL
CREATE TABLE usuarios(
id INT AUTO_INCREMENT PRIMARY KEY,
nombres VARCHAR(25) NOT NULL, CREATE TABLE IF NOT EXISTS productos (
apellidos VARCHAR(25) NOT NULL, id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL, codigobarras VARCHAR(20) NOT NULL ,
password VARCHAR(255) NOT NULL, descripcion VARCHAR(80) NOT NULL ,
created DATETIME, categorias_id INT NOT NULL ,
modified DATETIME precio DOUBLE NOT NULL ,
); cantidad INT NOT NULL ,
created DATETIME NULL ,
modified DATETIME NULL ,
CONSTRAINT fk_productos_categorias1 FOREIGN KEY (categorias_id )
CREATE TABLE IF NOT EXISTS categorias REFERENCES categorias (id)
(
);
id INT NOT NULL AUTO_INCREMENT
PRIMARY KEY,
descripcion VARCHAR(50) NOT NULL ,
estado SMALLINT NOT NULL DEFAULT 1 ,
created DATETIME NOT NULL ,
modified DATETIME NOT NULL
);
Configurando la BD en Cakephp

Para configurar la conexión a la base de datos, se debe editar


el archivo:
en /config/app_local.php
Creando la App en Cakephp

CAKE! CakePHP dispone de una herramienta


por línea de comandos, que permite
generar rápidamente las plantillas de
la aplicación para luego proceder a su
BAKE!
personalización

ACCION!
Creando la App en Cakephp

Se debe entrar por consola a la ruta del proyecto p.e

cd crudcake
cd bin
C:\xampp\htdocs\crudcake\bin>cake bake all Cliente
C:\xampp\htdocs\crudcake\bin>cake bake all Categorias
C:\xampp\htdocs\crudcake\bin>cake bake all Productos
Resultado…
C:\XAMPP\HTDOCS\CAKE36\SRC
│ Application.php C:\XAMPP\HTDOCS\CAKE36\SRC
│ ├───Template
├───Console
│ Installer.php │ ├───Categorias
│ │ │ add.ctp
├───Controller │ │ edit.ctp
│ │ AppController.php
│ │ CategoriasController.php │ │ index.ctp
│ │ ErrorController.php │ │ view.ctp
│ │ PagesController.php │ ├───Productos
│ │ ProductosController.php
│ │ UsuariosController.php │ │ add.ctp
├───Model │ │ edit.ctp
│ ├───Behavior │ │ index.ctp
│ │ empty
│ │ │ │ view.ctp
│ ├───Entity │ │
│ │ Categoria.php │ └───Usuarios
│ │ Producto.php
│ │ Usuario.php │ add.ctp
│ │ │ edit.ctp
│ └───Table │ index.ctp
│ CategoriasTable.php
│ ProductosTable.php │ view.ctp
│ UsuariosTable.php
Resultado… el método index
Resultado… el método add (insertar)
Resultado… el método edit (actualizar)
Resultado… el método View (ver)
UsuariosController Código Fuente
public function add()
<?php {

namespace App\Controller; $usuario = $this->Usuarios->newEntity();


if ($this->request->is('post')) {
use App\Controller\AppController;
$usuario = $this->Usuarios->patchEntity($usuario, $this->request->getData());
if ($this->Usuarios->save($usuario)) {
class UsuariosController extends AppController $this->Flash->success(__('The usuario has been saved.'));
{ return $this->redirect(['action' => 'index']);
public function index() }

{ $this->Flash->error(__('The usuario could not be saved. Please, try again.'));


}
$usuarios = $this->paginate($this->Usuarios);
$this->set(compact('usuario'));
$this->set(compact('usuarios'));
}//end add
} public function edit($id = null)
public function view($id = null) {
{ $usuario = $this->Usuarios->get($id, [ 'contain' => [] ]);

$usuario = $this->Usuarios->get($id, [ if ($this->request->is(['patch', 'post', 'put'])) {


$usuario = $this->Usuarios->patchEntity($usuario, $this->request->getData());
'contain' => []
if ($this->Usuarios->save($usuario)) {
]);
$this->Flash->success(__('The usuario has been saved.'));
return $this->redirect(['action' => 'index']);
$this->set('usuario', $usuario); }
} $this->Flash->error(__('The usuario could not be saved. Please, try again.'));
}
$this->set(compact('usuario'));
}//end edit
UsuariosController Código Fuente (Cont.)

public function delete($id = null)


{
$this->request->allowMethod(['post', 'delete']);
$usuario = $this->Usuarios->get($id);
if ($this->Usuarios->delete($usuario)) {
$this->Flash->success(__('The usuario has been deleted.'));
} else {
$this->Flash->error(__('The usuario could not be deleted. Please, try again.'));
}

return $this->redirect(['action' => 'index']);


}
Integración de cakephp con Bootstrap

Se puede hacer de dos formas

1. Referenciando los CSS y JS remotos así:


Integración de cakephp con Bootstrap

Dentro de la etiqueta <head> del archivo Template/Layout/default.php, pegar este código

<!-- para cargar el boostrap desde Internet →


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"> </script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-
awesome.min.css">

La vista principal es: Template/Pages/home.php,


Integración de cakephp con Bootstrap

En los botones de acciones del Template/productos/index.php personalizarlo por los tipos de botones
<?= $this->Html->link(__('View'), ['action' => 'view', $producto->id],['class'=>'btn btn btn-sm btn-
info']) ?>
<?= $this->Html->link(__('Edit'), ['action' => 'edit', $producto->id],['class'=>'btn btn btn-sm btn-
warning']) ?>
<?= $this->Form->postLink(__('Delete'), ['action' => 'delete', $producto->id],['class'=>'btn btn btn-sm
btn-danger'], ['confirm' => __('Are you sure you want to delete # {0}?', $producto->id)]) ?>
OTRA FORMA:Para que aparezca el Icono en vez de la palabra
<?= $this->Html->link('<i class="fa fa-pencil"></i>', ['controller' => 'Estudiantes', 'action' => 'edit', $estudiantes->id], ['escape' =>
false,'class'=>'edit-icon','title'=>'Editar estudiante']) ?>

<?= $this->Form->postLink('<i class="fa fa-times"></i>', ['controller' => 'Estudiantes','action' => 'delete', $estudiantes->id], ['confirm'
=> __('Estás seguro de que quieres eliminar el # {0}?', $estudiantes->id),'escape' => false,'class'=>'delete-icon','title'=>'Eliminar
estudiante']) ?>
Integración de cakephp con Bootstrap

Muestra algo como esto:

Así puedes personalizar el resto de las vistas


Cakephp V4.1 con

Se debe descargar la libreria del sitio oficial


https://github.com/tecnickcom/tcpdf
Copiarlo en la carpeta tcpdf en /vendor

En el archivo que genera el pdf debes poner


require_once ROOT. DS. 'vendor'. DS. 'tcpdf'. DS. 'tcpdf.php';
Cakephp V4.1 con
Dentro de la carpeta vendor/tcpdf/ crear un archivo llamado:
vendor/tcpdf/Pdf.php
Con esta estructura
CÓDIGO EJEMPLO
El reporte final queda asi
http://localhost/crudcake/reportes/listadocliente

Consulta cruzada

En Table/ClientesTable.php

En Table/VentasTable.php
http://localhost/crudcake/Facturas/

Consulta cruzada

Código de la vita templates/Facturas/index.php


Consulta cruzada

Código del Controlador controlador/FacturaController.php


http://localhost/crudcake/reportes/listadocliente

Consulta cruzada

ob_end_clean();
Manejo de Rutas En
config/routes.php

En el menu
REFERENCIAS

https://onlinewebtutorblog.com/cakephp-4-crud-using-ajax-requests-tutorial/

You might also like