Buscar..


Creando un nuevo controlador

namespace App\Controller;

class PostsController extends AppController {

    public function initialize(){
        parent::initialize();
        // code that you want to run before every action
    }
    public function view($id) {
       //Your code here
    }
}

Agregar el método beforeFilter () en el controlador

El método beforeFilter () se ejecuta antes que cualquier otro método en el controlador.

Primero use el espacio de nombres del evento antes de definir la clase en su archivo de controlador.

use Cake\Event\Event;

En su controlador, agregue el método beforeFilter () como se muestra a continuación.

public function beforeFilter(Event $event) {
    parent::beforeFilter($event);
}

O bien, puede utilizar el método initialize() .

public function initialize(){
    parent::initialize();
}

Pasando variables a la vista

Pasa cada variable para ver a la vez

$this->set('color', 'pink');
$this->set('color', $color);

Pasa múltiples variables para ver juntas a través de la función compacta ()

$color1 = 'pink';
$color2 = 'red';
$this->set(compact('color1', 'color2'));

Recuperando datos de publicación equivalentes a $ _POST

Puede recuperar datos de la publicación como Array.

$post_data= $this->request->data;

Puede recuperar datos de publicación para clave particular.

$this->request->data['field'];

Recuperar valor clave específico

$this->request->data('key_name');

Recuperar el valor clave específico de la matriz anidada

$this->request->data('data.subfield');

la diferencia entre la notación de matriz y el método de data() es que data() es seguro contra errores y devuelve null si la clave no existe en la matriz

así que en vez de hacer

if(isset($this->request->data['field']) && $this->request->data['field']) { ...}

tu puedes hacer

if($this->request->data('field')) { ...}

para CakePHP 3.4.x +

obtener todos los datos:

$this->request->getData();

obtener clave específica:

$this->request->getData('key');

para configurar los datos disponibles para la función getData, debe hacer algo como:

$this->request = $this->request->withData('some_key_on_the_fly', 'value');
$some_key_on_the_fly = $this->request->getData('some_key_on_the_fly');

Útil para actualizar los modelos en controlador con datos estáticos.

Cargue otro modelo en el controlador

Por defecto, CakePHP carga el modelo relacionado en el controlador. Para cargar otro modelo en el controlador, use el método loadModel ():

$this->loadModel('Articles');

o carga sobre la marcha

$table = TableRegistry::get('Articles');
$table->find();

Redirigiendo a otra página desde el controlador

Redirigir al interior de la aplicación (otra acción del controlador específico).

return $this->redirect([
    'controller' => 'myController',
    'action' => 'myAction'
]);

Redirigir a la página de referencia

return $this->redirect($this->referer());

Redirigir al exterior de la aplicación o URL específica

return $this->redirect("http://stackoverflow.com/users/1793428/haresh-vidja");

Pasando Variable a Acción desde URL con redireccionamiento

Pasando Variable en URL como parámetro de un método

return $this->redirect([
    'controller' => 'users',
    'action' => 'profile',
    $id
]);

La URL debe tener este aspecto http: // your_app_url / users / profile / {id}

en el archivo UsersController.php en el método de perfil ()

class UsersController extends Controller {
    public function profile($id=null) {
        $userData=$this->Users->get($id);
    }
}

Pasando la variable en la URL como una cadena de consulta

return $this->redirect([
    'controller' => 'users',
    'action' => 'profile',
    '?'=>['id'=>$id]
]);

La URL debe tener este aspecto http: // your_app_url / users / profile /? Id = {id}

en el archivo UsersController.php en el método de perfil ()

class UsersController extends Controller {
    public function profile() {
        $userData=$this->Users->get($this->request->query('id'));
    }
}

Establecer o cambiar el diseño de la aplicación

Establecer diseño predeterminado para toda la aplicación . es decir, el archivo de diseño creado en /src/Template/Layout/admin.ctp

class AppsController extends Controller {

    public function beforeFilter(Event $event) {
        parent::beforeFilter($event);
        $this->viewBuilder()->layout('admin'); // For Version >= 3.1 or
        $this->layout = 'admin'; // for version < 3.1
        
        // your other code should be here
    }
}

Establecer diseño predeterminado para acciones específicas en la aplicación . es decir, la aplicación tiene un diseño diferente en la página de inicio de sesión en /src/Template/Layout/login.ctp

class UsersController extends Controller {

    public function login() {

        $this->viewBuilder()->layout('login'); // For Version >= 3.1 or
        $this->layout = 'login'; // for version < 3.1
        
        //your other code should be here
    }
}

Cambiar diseño para controlador específico . Por ejemplo, necesita un diseño diferente para todos los métodos de controlador específico.

La clase UsersController extiende el controlador {

    public function beforeFilter(Event $event) {
        parent::beforeFilter($event);

        $this->viewBuilder()->layout('user_layout'); // For Version >= 3.1 or
        $this->layout = 'user_layout'; // for version < 3.1
        
        //your other code should be here
    }
}

Establecer diseño de solicitud de Ajax

Generalmente en AJAX no hay necesidad de cargar CSS, JS. También omitiendo otro código HTML.

Haga un archivo ajax.ctp en / src / Template / Layout, y el código debe ser

<?php 
    $this->fetch('content');

Configure el diseño basado en AJAX para toda la aplicación, en AppsController.php

La clase AppsController extiende el controlador {

public function beforeFilter(Event $event) {
    parent::beforeFilter($event);
    if($this->request->isAjax())
    {
        $this->viewBuilder()->layout('ajax'); // For Version >= 3.1 or
        $this->layout = 'ajax'; // for version < 3.1

    }
    else
    {
        $this->viewBuilder()->layout('admin'); // For Version >= 3.1 or
        $this->layout = 'admin'; // for version < 3.1
    }
    
    // your other code should be here
}

}

Cargar Componentes en CakePHP

Podemos cargar componentes de dos maneras.

  1. Al inicializar o anular la propiedad $ components en Controller
  2. Usando el método loadComponent () en el método initialize () del controlador.

Way-1 Debería ser anular el componente de carga por AppsController.php cargar uno o más componentes

class UsersController extends AppController {
    public $components = ['RequestHandler','Auth','Flash']; 
}

Way-2 Use esta forma cuando necesite cargar componentes dinámicamente para un controlador específico. Cargar un componente

class UsersController extends AppController {
    public function initialize() {
        parent::initialize();
        $this->loadComponent("RequestHandler"); // load specific component
        $this->loadComponent(["RequestHandler","Auth","Flash"]); // load specific component
    }
}

¿Qué es el método initilaize ()?

initialize () se introduce en la versión CakePHP> 3.0

Como estructura de código, tiene el mismo aspecto que el método beforeFilter (). pero hay muchas diferencias entre beforeFilter () y initialize ().

  1. initialize () siempre se llama después de llamar al constructor. pero beforeFilter () no está llamando en caso de que no se encuentre un método de acción en un controlador en particular.
  2. El método initialize () se usa generalmente para inicializar algo como agregar nuevos componentes y ayudantes. pero en beforeFilter () se usa generalmente para ejecutar alguna parte de lógica global.

Recuperar datos de cadena de consulta equivalentes a $ _GET

Puede recuperar datos de cadena de consulta como Array.

$post_data= $this->request->query;

Puede recuperar datos de publicación para clave particular.

$this->request->query['field'];

Recuperar valor clave específico

$this->request->query('key_name');

Recuperar el valor clave específico de la matriz anidada

$this->request->query('data.subfield');

Creación de la clase de tabla (modelo)

Cómo crear User Model Class

namespace App\Model\Table;
use Cake\ORM\Table;

class UsersTable extends Table {
    public function initialize(array $config) {
        $this->table('users'); //define table name
        $this->displayField('username'); // unique or other special field of users table
        $this->primaryKey('id'); // primary key of users table
        $this->tablePrefix('prefix_'); // if prefix set tablename should be prefix_users

        // your other code here
    }

    // your other methods here
}

Asociaciones de modelos en CakePHP

Hay 4 tipos de asociaciones (relaciones) que podemos definir en CakePHP

class PostsTable extends Table {
    public function initialize(array $config) {

        // table initialization code should be here

        $this->belongsTo('Authors', [
            'className' => 'Authors',
            'foreignKey' => 'author_id',
            'joinType' => 'INNER',
        ]);
        $this->hasMany('Tags');
        $this->hasOne('Categories');
        $this->hasAndBelongsToMany('Topics');
    }
}

En el ejemplo anterior, puedes ver 4 tipos de relaciones

La publicación pertenece al Autor (One to One) , lo que significa que en la tabla de posts tiene una clave externa author_id que está asociada con la id de la tabla de authors .

La publicación tiene muchas etiquetas (una a muchas) , lo que significa que en la tabla de tags tiene una clave externa post_id que está asociada con la id de la tabla de posts .

La publicación tiene una etiqueta (muchas a una o una a una) , lo que significa que en la tabla de posts tiene una category_id externa ID_ID que está asociada con la id de la tabla de categories .

La publicación tiene y pertenece a Temas (muchos a muchos) , esta es una relación de muchos a muchos entre las posts y la tabla de topics . para mantener la relación de muchos a muchos debe ser necesario crear una tercera tabla, tabla, nombre de la tabla debe ser posts_categories . Campos de esta tabla como se menciona abajo

  1. id (clave principal de la tabla)
  2. post_id (clave externa de la tabla de posts )
  3. topic_id (clave externa de la tabla de topics )


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow