Recherche…


Créer un nouveau contrôleur

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
    }
}

Ajouter la méthode beforeFilter () dans Controller

La méthode beforeFilter () s'exécute avant toute autre méthode exécutée dans le contrôleur.

Utilisez d'abord l'espace de noms Event avant de définir la classe dans votre fichier de contrôleur.

use Cake\Event\Event;

Dans votre contrôleur, ajoutez la méthode beforeFilter () comme indiqué ci-dessous.

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

Ou, vous pouvez utiliser la méthode initialize() .

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

Passer des variables à la vue

Passer chaque variable à afficher à la fois

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

Passer plusieurs variables à visualiser ensemble via la fonction compact ()

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

Récupération de données de post équivalentes à $ _POST

Vous pouvez récupérer des données de publication en tant que tableau.

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

Vous pouvez récupérer des données post pour une clé particulière.

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

Récupérer une valeur de clé spécifique

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

Récupérer une valeur de clé spécifique d'un tableau imbriqué

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

la différence entre la notation du tableau et data() méthode data() est que data() est sans erreur et renvoie null si la clé n'existe pas dans le tableau

tellement de faire

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

tu peux faire

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

pour CakePHP 3.4.x +

obtenir toutes les données:

$this->request->getData();

obtenir une clé spécifique:

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

pour définir les données disponibles pour la fonction getData, vous devez faire quelque chose comme:

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

utile pour mettre à jour les modèles dans le contrôleur avec des données statiques

Charger un autre modèle dans le contrôleur

Par défaut, CakePHP charge le modèle associé dans le contrôleur. Pour charger un autre modèle dans le contrôleur, utilisez la méthode loadModel ():

$this->loadModel('Articles');

ou charger à la volée

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

Redirection vers une autre page du contrôleur

Rediriger dans l'application (une autre action du contrôleur spécifique).

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

Rediriger vers la page de référence

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

Rediriger en dehors de l'application ou de l'URL spécifique

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

Passage d'une variable à une action à partir d'une URL avec redirection

Passer une variable dans l'URL comme paramètre d' une méthode

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

L'URL devrait ressembler à ceci : http: // your_app_url / users / profile / {id}

dans le fichier UsersController.php de la méthode profile ()

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

Passer une variable dans l'URL en tant que chaîne de requête

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

L'URL devrait ressembler à ceci : http: // votre_app_url / users / profile /? Id = {id}

dans le fichier UsersController.php de la méthode profile ()

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

Définir ou modifier la disposition de l'application

Définissez la mise en page par défaut pour l’ensemble de l’application . c'est-à-dire, fichier de mise en page créé dans /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
    }
}

Définissez la mise en page par défaut pour une action spécifique dans l'application . c'est-à-dire que l'application a une disposition différente dans la page de connexion dans /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
    }
}

Modifier la mise en page pour un contrôleur spécifique . par exemple, vous avez besoin d'une mise en page différente pour toute méthode de contrôleur spécifique

la classe UsersController étend Controller {

    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
    }
}

Définir la disposition de la requête Ajax

Généralement dans AJAX demande pas besoin de charger CSS, JS. En omettant également d'autres codes HTML.

Créer le fichier ajax.ctp dans / src / Template / Layout, et le code devrait être

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

Définir la mise en page basée sur AJAX pour l'application entière, dans AppsController.php

class AppsController étend Controller {

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
}

}

Charger des composants dans CakePHP

Nous pouvons charger des composants de deux manières.

  1. Par initialiser ou remplacer la propriété $ components dans Controller
  2. En utilisant la méthode loadComponent () dans la méthode initialize () du contrôleur.

Way-1 Il devrait être surcharger le composant par AppsController.php charger un ou plusieurs composants

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

Way-2 Utilisez cette méthode lorsque vous avez besoin d'un composant de chargement dynamique pour un contrôleur spécifique. Charger un composant

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

Quelle est la méthode initilaize ()?

initialize () est introduit dans la version de CakePHP> 3.0

En tant que structure de code, elle ressemble à la méthode beforeFilter (). mais il y a beaucoup de différences entre beforeFilter () et initialize ().

  1. initialize () est toujours appelée après l'appel du constructeur. mais beforeFilter () n'appelle pas en cas de méthode d'action introuvable dans un contrôleur particulier.
  2. La méthode initialize () est généralement utilisée pour initialiser quelque chose comme ajouter de nouveaux composants et assistants. mais dans beforeFilter () est généralement utilisé pour exécuter une partie logique globale.

Retracer des données de chaîne de requête équivalentes à $ _GET

Vous pouvez récupérer des données de chaîne de requête sous forme de tableau.

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

Vous pouvez récupérer des données post pour une clé particulière.

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

Récupérer une valeur de clé spécifique

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

Récupérer une valeur de clé spécifique d'un tableau imbriqué

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

Création d'une classe de table (modèle)

Comment créer une classe de modèle d'utilisateur

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
}

Associations de mannequins à CakePHP

Il y a 4 types d'associations (relations) que nous pouvons définir dans 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');
    }
}

Dans l'exemple ci-dessus, vous pouvez voir 4 types de relations

Post appartient à Author (One to One) , cela signifie que la table des posts a une clé étrangère author_id associée à la table id of authors .

Post a beaucoup de balises (One to Many) , cela signifie tags table des tags contient une clé étrangère post_id associée à l' id de la table des posts .

Publier a une balise (plusieurs à un ou un à un) , cela signifie que la table des posts a une clé étrangère category_id associée à la table id de categories .

Post a et appartient à Topics (Many to Many) , il y a beaucoup à beaucoup de relations entre les posts et la table des topics . pour entretenir plusieurs relations doivent avoir besoin de créer une troisième table, table, le nom de la table devrait être posts_categories . Champs de cette table comme mentionné ci-dessous

  1. id (clé primaire de la table)
  2. post_id (clé étrangère de la table des posts )
  3. topic_id (clé étrangère de la table des topics )


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow