Ricerca…


Creazione di un nuovo controller

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

Aggiungi il metodo beforeFilter () in Controller

Il metodo beforeFilter () viene eseguito prima dell'esecuzione di qualsiasi altro metodo nel controller.

Prima usa lo spazio dei nomi Event prima di definire la classe nel tuo file controller.

use Cake\Event\Event;

Nel controller, aggiungere il metodo beforeFilter () come mostrato di seguito.

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

Oppure, puoi usare il metodo initialize() .

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

Passare le variabili alla vista

Passa ogni variabile da visualizzare alla volta

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

Passare più variabili per visualizzare insieme tramite la funzione compact ()

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

Recupero dei dati dei post equivalenti a $ _POST

È possibile recuperare i dati del post come matrice.

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

È possibile recuperare i dati dei post per una chiave particolare.

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

Recupera un valore chiave specifico

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

Recupera il valore chiave specifico dell'array nidificato

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

la differenza tra la notazione dell'array e il metodo data() è che data() è sicura da errori e restituisce null se la chiave non esiste nell'array

così intenti di fare

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

tu puoi fare

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

per CakePHP 3.4.x +

ottieni tutti i dati:

$this->request->getData();

ottieni la chiave specifica:

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

per impostare i dati disponibili per la funzione getData devi fare qualcosa del tipo:

$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 per l'aggiornamento dei modelli nel controller con dati statici

Carica un altro modello nel controller

Di default CakePHP carica il modello correlato nel controller. Per caricare un altro modello nel controller, utilizzare il metodo loadModel ():

$this->loadModel('Articles');

o caricare al volo

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

Reindirizzamento a un'altra pagina dal Controller

Reindirizzare all'interno dell'applicazione (un'altra azione di un controller specifico).

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

Reindirizza alla pagina dei referrer

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

Reindirizzare all'esterno dell'applicazione o URL specifico

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

Passaggio da variabile a azione dall'URL con reindirizzamento

Passare la variabile in URL come parametro di un metodo

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

L'URL dovrebbe essere simile a questo http: // tuo_app_url / utenti / profilo / {id}

nel file UsersController.php nel metodo profile ()

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

Passare la variabile in URL come stringa di query

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

L'URL dovrebbe essere simile a questo http: // your_app_url / users / profile /? Id = {id}

nel file UsersController.php nel metodo profile ()

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

Imposta o modifica il layout dell'applicazione

Imposta il layout predefinito per l'intera applicazione . cioè, creato il file di layout in /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
    }
}

Imposta il layout predefinito per un'azione specifica nell'applicazione . cioè, l'applicazione ha un layout diverso nella pagina di accesso in /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
    }
}

Cambia layout per controller specifico . per esempio, hai bisogno di un layout diverso per tutti i metodi del controller specifico

class UsersController estende il 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
    }
}

Imposta il layout della richiesta Ajax

Generalmente nella richiesta AJAX non è necessario caricare CSS, JS. Anche omettendo altro codice HTML.

Crea un file ajax.ctp in / src / Template / Layout e il codice dovrebbe essere

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

Imposta il layout basato su AJAX per l'intera applicazione, in AppsController.php

la classe AppsController estende il 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
}

}

Carica componenti in CakePHP

Possiamo caricare i componenti in due modi.

  1. Inizializza o sovrascrive la proprietà $ components in Controller
  2. Usando il metodo loadComponent () nel metodo initialize () di Controller.

Way-1 Dovrebbe essere l'override del componente di caricamento da parte di AppsController.php caricare uno o più componenti

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

Way-2 Utilizzare in questo modo quando è necessario caricare il componente in modo dinamico per controller specifici. Carica 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
    }
}

Cos'è il metodo initilaize ()?

initialize () è stato introdotto in CakePHP versione> 3.0

Come una struttura di codice, sembra uguale al metodo beforeFilter (). ma ci sono molte differenze tra beforeFilter () e initialize ().

  1. initialize () viene sempre chiamato dopo la chiamata del costruttore. ma beforeFilter () non sta chiamando in caso di metodo di azione non trovato in particolare controller.
  2. Il metodo initialize () viene generalmente utilizzato per inizializzare qualcosa come aggiungere nuovi componenti e helper. ma in beforeFilter () viene generalmente utilizzato per eseguire parte logica globale.

Dati della stringa di query Retrive equivalenti a $ _GET

È possibile recuperare i dati della stringa di query come matrice.

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

È possibile recuperare i dati dei post per una chiave particolare.

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

Recupera un valore chiave specifico

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

Recupera il valore chiave specifico dell'array nidificato

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

Creazione della classe Tabella (modello)

Come creare la classe del modello utente

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
}

Associazioni di modelli in CakePHP

Esistono 4 tipi di associazioni (relazioni) che possiamo definire in 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');
    }
}

Nell'esempio sopra, puoi vedere 4 tipi di relazioni

Il post appartiene all'autore (One to One) , significa che nella tabella dei posts è presente una chiave straniera author_id che è associata alla tabella id of authors .

Messaggio ha molte Tag (uno a molti), significa in tags tabella ha una chiave esterna post_id che è associato con id di posts tavola.

Il post ha un tag (molti a uno o uno a uno) , significa che nella tabella dei posts è presente una chiave straniera category_id che è associata id della tabella delle categories .

Post ha e appartiene a Topics (Many to Many) , questa è una relazione molte a molte tra posts e topics table. per mantenere molti a molti relazione deve essere necessario creare la terza tabella, tabella, il nome della tabella dovrebbe essere posts_categories . Campi di questa tabella come indicato di seguito

  1. id (chiave primaria della tabella)
  2. post_id (tabella chiave esterna dei posts )
  3. topic_id (tabella chiave esterna della tabella degli topics )


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow