Guía de inicio rápido

La mejor forma de experimentar y aprender CakePHP es sentarse y construir algo.

Para empezar crearemos una sencilla aplicación para guardar favoritos.

Tutorial Gestor de Contenidos

Este tutorial lo guiará a través de la creación de un CMS simple. Para empezar, instalaremos CakePHP, creando nuestra base de datos y construyendo una gestión simple de artículos.

Esto es lo que se necesitará:

  1. Un servidor de base de datos. Vamos a utilizar el servidor MySQL en este tutorial. Necesitará saber lo suficiente sobre SQL para crear una base de datos y ejecutar fragmentos SQL del tutorial. CakePHP se encargará de construir todas las consultas que su aplicación necesita. Como estamos usando MySQL, también asegúrese de tener pdo_mysql habilitado en PHP.

  2. Conocimientos básicos de PHP.

Antes de comenzar, debe asegurarse de tener una versión de PHP actualizada:

php -v

Al menos debería haber instalado PHP 8.1 (CLI) o superior. La versión PHP de su servidor web también debe ser de 8.1 o superior, y debería ser la misma versión que su interfaz de línea de comando (CLI) de PHP.

Obteniendo CakePHP

La forma más fácil de instalar CakePHP es usar Composer. Composer es una manera simple de instalar CakePHP desde su terminal o línea de comandos. Primero, necesita descargar e instalar Composer si aún no lo ha hecho. Si tiene cURL instalado, es tan fácil como ejecutar lo siguiente:

curl -s https://getcomposer.org/installer | php

O, puede descargar composer.phar desde el sitio web de Composer.

Luego simplemente escriba la siguiente línea en su terminal desde el directorio de instalación para instalar el esqueleto de la aplicación CakePHP en la carpeta cms del directorio de trabajo actual:

php composer.phar create-project --prefer-dist cakephp/app:5.* cms

Si ha descargado y ejecutado el Instalador de Composer de Windows, entonces, escriba la siguiente línea en el terminal desde el directorio de instalación (ej. C:\wamp\www\dev):

composer self-update && composer create-project --prefer-dist cakephp/app:5.* cms

La ventaja de usar Composer es que completará automáticamente algunas tareas de configuración importantes, como establecer los permisos de archivo correctos y crear el archivo config/app.php por usted.

Hay otras formas de instalar CakePHP. Si no puede o no quiere usar Composer, consulte la sección Instalación.

Independientemente de cómo haya descargado e instalado CakePHP, una vez que la configuración es completada, la disposición de su directorio debería ser similar a la siguiente:

cms/
  bin/
  config/
  logs/
  plugins/
  resources/
  src/
  templates/
  tests/
  tmp/
  vendor/
  webroot/
  .editorconfig
  .gitignore
  .htaccess
  composer.json
  index.php
  phpunit.xml.dist
  README.md

Ahora podría ser un buen momento para aprender un poco sobre cómo funciona la estructura de directorios de CakePHP: consulte la sección Estructura de carpetas de CakePHP.

Si se pierde durante este tutorial, puede ver el resultado final en GitHub.

Comprobando nuestra instalación

PPodemos verificar rápidamente que nuestra instalación es correcta, verificando la página de inicio predeterminada. Antes de que pueda hacer eso, deberá iniciar el servidor de desarrollo:

cd /path/to/our/app
bin/cake server

Nota

Para Windows, el comando debe ser bin\cake server (tenga en cuenta la barra invertida).

Esto iniciará el servidor web incorporado de PHP en el puerto 8765. Abra http://localhost:8765 en su navegador web para ver la página de bienvenida. Todos las viñetas deben ser sombreros de chef verdes indicando que CakePHP puede conectarse a De lo contrario, es posible que deba instalar extensiones adicionales de PHP o establecer permisos de directorio.

A continuación, crearemos nuestra Base de datos y crearemos nuestro primer modelo.

Tutorial CMS - Creando la Base de Datos

Ahora que tenemos CakePHP instalado, configuremos la base de datos para nuestro CMS. Si aún no lo ha hecho, cree una base de datos vacía para usar en este tutorial, con un nombre de su elección, p. ej. cake_cms. Si está utilizando MySQL/MariaDB, puede ejecutar el siguiente SQL para crear las tablas necesarias:

USE cake_cms;

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL,
    created DATETIME,
    modified DATETIME
);

CREATE TABLE articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    title VARCHAR(255) NOT NULL,
    slug VARCHAR(191) NOT NULL,
    body TEXT,
    published BOOLEAN DEFAULT FALSE,
    created DATETIME,
    modified DATETIME,
    UNIQUE KEY (slug),
    FOREIGN KEY user_key (user_id) REFERENCES users(id)
) CHARSET=utf8mb4;

CREATE TABLE tags (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(191),
    created DATETIME,
    modified DATETIME,
    UNIQUE KEY (title)
) CHARSET=utf8mb4;

CREATE TABLE articles_tags (
    article_id INT NOT NULL,
    tag_id INT NOT NULL,
    PRIMARY KEY (article_id, tag_id),
    FOREIGN KEY tag_key(tag_id) REFERENCES tags(id),
    FOREIGN KEY article_key(article_id) REFERENCES articles(id)
);

INSERT INTO users (email, password, created, modified)
VALUES
('[email protected]', 'secret', NOW(), NOW());

INSERT INTO articles (user_id, title, slug, body, published, created, modified)
VALUES
(1, 'First Post', 'first-post', 'This is the first post.', 1, NOW(), NOW());

Si está utilizando PostgreSQL, conéctese a la base de datos cake_cms y ejecute el siguiente SQL en su lugar:

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    email VARCHAR(255) NOT NULL,
    password VARCHAR(255) NOT NULL,
    created TIMESTAMP,
    modified TIMESTAMP
);

CREATE TABLE articles (
    id SERIAL PRIMARY KEY,
    user_id INT NOT NULL,
    title VARCHAR(255) NOT NULL,
    slug VARCHAR(191) NOT NULL,
    body TEXT,
    published BOOLEAN DEFAULT FALSE,
    created TIMESTAMP,
    modified TIMESTAMP,
    UNIQUE (slug),
    FOREIGN KEY (user_id) REFERENCES users(id)
);

CREATE TABLE tags (
    id SERIAL PRIMARY KEY,
    title VARCHAR(191),
    created TIMESTAMP,
    modified TIMESTAMP,
    UNIQUE (title)
);

CREATE TABLE articles_tags (
    article_id INT NOT NULL,
    tag_id INT NOT NULL,
    PRIMARY KEY (article_id, tag_id),
    FOREIGN KEY (tag_id) REFERENCES tags(id),
    FOREIGN KEY (article_id) REFERENCES articles(id)
);

INSERT INTO users (email, password, created, modified)
VALUES
('[email protected]', 'secret', NOW(), NOW());

INSERT INTO articles (user_id, title, slug, body, published, created, modified)
VALUES
(1, 'First Post', 'first-post', 'This is the first post.', TRUE, NOW(), NOW());

Es posible que haya notado que la tabla articles_tags utiliza una clave primaria compuesta. CakePHP admite claves primarias compuestas en casi todas partes, lo que le permite tener esquemas más simples que no requieren columnas id adicionales.

Los nombres de tabla y columna que usamos no fueron arbitrarios. Al usar las convenciones de nomenclatura de CakePHP, podemos aprovechar CakePHP más eficazmente y evitar la necesidad de configurar el framework. Si bien CakePHP es lo suficientemente flexible para adaptarse a casi cualquier esquema de base de datos, adherirse a las convenciones le ahorrará tiempo, ya que puede aprovechar los valores predeterminados basados en convenciones que ofrece CakePHP.

Configuración de la base de datos

A continuación, digamos a CakePHP dónde está nuestra base de datos y cómo conectarse a ella. Reemplace los valores en el arreglo Datasources.default en su archivo config/app_local.php con los que aplican a su configuración. Una arreglo de configuración completo de muestra podría tener el siguiente aspecto:

<?php
// config/app_local.php
return [
    // Más configuración arriba.
    'Datasources' => [
        'default' => [
            'host' => 'localhost',
            'username' => 'cakephp',
            'password' => 'AngelF00dC4k3~',
            'database' => 'cake_cms',
            'url' => env('DATABASE_URL', null),
        ],
    ],
    // Más configuración abajo.
];

Una vez que haya guardado su archivo config/app_local.php, debería ver que la sección “CakePHP is able to connect to the database” tiene un gorro de cocinero verde.

Nota

El fichero config/app_local.php se utiliza para sobreescribir los valores por defecto de la configuración en config/app.php. Esto facilita la configuración en los entornos de desarrollo.

Creando nuestro primer modelo

Los modelos son el corazón de las aplicaciones CakePHP. Nos permiten leer y modificar nuestros datos. Nos permiten construir relaciones entre nuestros datos, validarlos y aplicar reglas de aplicación. Los modelos construyen las bases necesarias para construir nuestras acciones y plantillas del controlador.

Los modelos de CakePHP se componen de objetos Table y Entity. Los objetos Table brindan acceso a la colección de entidades almacenadas en una tabla específica. Se almacenan en src/Model/Table. El archivo que crearemos se guardará en src/Model/Table/ArticlesTable.php. El archivo completo debería verse así:

<?php
// src/Model/Table/ArticlesTable.php
declare(strict_types=1);

namespace App\Model\Table;

use Cake\ORM\Table;

class ArticlesTable extends Table
{
    public function initialize(array $config): void
    {
        parent::initialize($config);
        $this->addBehavior('Timestamp');
    }
}

Hemos agregado el comportamiento Timestamp Behavior que automáticamente llenará las columnas created y modified de nuestra tabla. Al nombrar nuestro objeto Table ArticlesTable, CakePHP puede usar convenciones de nomenclatura para saber que nuestro modelo usa la tabla articles` de la base de datos. CakePHP también usa convenciones para saber que la columna id es la clave primaria de nuestra tabla.

Nota

CakePHP creará dinámicamente un objeto modelo para usted si no puede encontrar un archivo correspondiente en src/Model/Table. Esto también significa que si accidentalmente asigna un nombre incorrecto a su archivo (es decir, articlestable.php o ArticleTable.php), CakePHP no reconocerá ninguna de sus configuraciones y utilizará el modelo generado en su lugar.

También crearemos una clase Entity para nuestros artículos. Las Entity representan un solo registro en la base de datos y proporcionan un comportamiento a nivel de fila para nuestros datos. Nuestra Entity se guardará en src/Model/Entity/Article.php. El archivo completo debería verse así:

<?php
// src/Model/Entity/Article.php
declare(strict_types=1);

namespace App\Model\Entity;

use Cake\ORM\Entity;

class Article extends Entity
{
    protected array $_accessible = [
        'title' => true,
        'body' => true,
        'published' => true,
        'created' => true,
        'modified' => true,
        'users' => true,
    ];
}

Nuestra entidad es bastante delgada en este momento, y solo hemos configurado la propiedad _accessible que controla cómo las propiedades pueden ser modificadas por entities-mass-assignment.

No podemos hacer mucho con nuestros modelos en este momento, así que a continuación crearemos nuestro primer Controller y Template </tutorials-and-examples/cms/articles-controller> para permitirnos interactuar con nuestro modelo.

CMS Tutorial - Creating the Articles Controller

Nota

La documentación no es compatible actualmente con el idioma español en esta página.

Por favor, siéntase libre de enviarnos un pull request en Github o utilizar el botón Improve this Doc para proponer directamente los cambios.

Usted puede hacer referencia a la versión en Inglés en el menú de selección superior para obtener información sobre el tema de esta página.