Suche…


Neuen Controller erstellen

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

Fügen Sie die Methode beforeFilter () im Controller hinzu

Die beforeFilter () -Methode wird ausgeführt, bevor andere Methoden im Controller ausgeführt werden.

Verwenden Sie zuerst den Ereignis-Namespace, bevor Sie die Klasse in Ihrer Controller-Datei definieren.

use Cake\Event\Event;

Fügen Sie in Ihrem Controller die Methode beforeFilter () hinzu, wie unten gezeigt.

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

Oder Sie können die initialize() -Methode verwenden.

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

Variablen an View übergeben

Übergeben Sie jede Variable, um sie gleichzeitig anzuzeigen

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

Übergeben Sie mehrere Variablen, um sie zusammen mit der Funktion compact () anzuzeigen

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

Abrufen von Post-Daten, die $ _POST entsprechen

Sie können Post-Daten als Array abrufen.

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

Sie können die Postdaten für einen bestimmten Schlüssel abrufen.

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

Bestimmten Schlüsselwert abrufen

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

Ruft einen bestimmten Schlüsselwert eines verschachtelten Arrays ab

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

Der Unterschied zwischen der Array-Notation und der data() -Methode besteht darin, dass data() fehlersicher ist und null zurückgibt, wenn der Schlüssel nicht im Array vorhanden ist

so viel zu tun

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

du kannst tun

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

für CakePHP 3.4.x +

Alle Daten abrufen:

$this->request->getData();

bestimmten Schlüssel erhalten:

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

Um Daten für die getData-Funktion verfügbar zu machen, müssen Sie Folgendes tun:

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

nützlich für die Aktualisierung der Modelle im Controller mit statischen Daten

Laden Sie ein anderes Modell in den Controller

Standardmäßig lädt CakePHP das zugehörige Modell in den Controller. Um ein anderes Modell in den Controller zu laden, verwenden Sie die loadModel () -Methode:

$this->loadModel('Articles');

oder laden Sie on the fly

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

Umleitung von Controller zu einer anderen Seite

Weiterleitung in Anwendung (andere Aktion eines bestimmten Controllers).

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

Weiterleitung auf Verweisseite

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

Weiterleitung außerhalb der Anwendung oder einer bestimmten URL

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

Variable an Aktion von URL mit Weiterleitung übergeben

Variable in URL als Parameter einer Methode übergeben

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

Die URL sollte folgendermaßen aussehen : http: // your_app_url / users / profile / {id}

in der Datei UsersController.php in der Methode profile ()

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

Variable in URL als Abfragezeichenfolge übergeben

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

Die URL sollte folgendermaßen aussehen : http: // your_app_url / users / profile /? Id = {id}

in der Datei UsersController.php in der Methode profile ()

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

Legen Sie das Layout der Anwendung fest oder ändern Sie es

Legen Sie das Standardlayout für die gesamte Anwendung fest . dh erstellte Layout-Datei 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
    }
}

Legen Sie das Standardlayout für bestimmte Aktionen in der Anwendung fest . Die Anwendung hat also ein anderes Layout in der Anmeldeseite 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
    }
}

Ändern Sie das Layout für einen bestimmten Controller . B. benötigen Sie ein anderes Layout für alle Methoden der einzelnen Controller

Klasse UsersController erweitert 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
    }
}

Legen Sie das Ajax-Anforderungslayout fest

In der AJAX-Anforderung ist im Allgemeinen kein Laden von CSS, JS erforderlich. Auslassen von anderem HTML-Code.

Erstellen Sie die Datei ajax.ctp in / src / Template / Layout, und der Code sollte sein

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

Legen Sie das AJAX-basierte Layout für die gesamte Anwendung in AppsController.php fest

Klasse AppsController erweitert 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
}

}

Komponenten in CakePHP laden

Wir können Komponenten auf zwei Arten laden.

  1. Durch Initialisieren oder Überschreiben der $ components-Eigenschaft in Controller
  2. Durch Verwendung der loadComponent () -Methode in der initialize () -Methode des Controllers.

Möglichkeit -1 Es sollte eine Ladekomponente überschrieben werden, indem AppsController.php eine oder mehrere Komponenten lädt

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

Weg-2 Verwenden Sie diesen Weg, wenn Sie Komponenten dynamisch für bestimmte Controller laden müssen. Laden Sie eine Komponente

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

Was ist die Methode initilaize ()?

initialize () wird in CakePHP Version> 3.0 eingeführt

Als Codestruktur sieht sie genauso aus wie die beforeFilter () -Methode. Es gibt jedoch viele Unterschiede zwischen beforeFilter () und initialize ().

  1. initialize () wird immer aufgerufen, nachdem der Konstruktor aufgerufen wurde. beforeFilter () wird jedoch nicht aufgerufen, wenn die Aktionsmethode in einem bestimmten Controller nicht gefunden wird.
  2. Die initialize () -Methode wird im Allgemeinen für das Initialisieren verwendet, z. aber in beforeFilter () wird im Allgemeinen zum Ausführen eines globalen Logikteils verwendet.

Abrufen von Abfragezeichenfolgendaten, die $ _GET entsprechen

Sie können Abfrage-String-Daten als Array abrufen.

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

Sie können die Postdaten für einen bestimmten Schlüssel abrufen.

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

Bestimmten Schlüsselwert abrufen

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

Ruft einen bestimmten Schlüsselwert eines verschachtelten Arrays ab

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

Tabellen- (Modell-) Klasse erstellen

So erstellen Sie eine Benutzermodellklasse

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
}

Modellassoziationen in CakePHP

Es gibt 4 Arten von Assoziationen (Beziehungen), die wir in CakePHP definieren können

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');
    }
}

Im obigen Beispiel sehen Sie 4 Arten von Beziehungen

Post gehört zu Author (One to One). author_id bedeutet, dass in der posts Tabelle ein Fremdschlüssel author_id ist, der der id der authors Tabelle zugeordnet ist.

Beitrag hat viele Tags (ein bis viele) , post_id in der tags Tabelle gibt es einen Fremdschlüssel post_id der der id der posts Tabelle zugeordnet ist.

Beitrag hat ein Tag (viele zu eins oder eins zu eins) . Dies bedeutet, dass in der posts ein Fremdschlüssel category_id ist, der mit der id der categories Tabelle verknüpft ist.

Beitrag hat und gehört zu Themen (viele bis viele) , dies ist eine Beziehung zwischen posts und topics . Für die Pflege vieler zu vieler Beziehungen muss die dritte Tabelle erstellt werden. Der Tabellenname sollte posts_categories . Felder dieser Tabelle wie unten erwähnt

  1. id (Primärschlüssel der Tabelle)
  2. post_id (Fremdschlüssel der posts Tabelle)
  3. topic_id (Fremdschlüssel der topics )


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow