Sök…


Skapa ny kontroller

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

Lägg till föreFilter () -metoden i Controller

Metoden föreFilter () körs innan någon annan metod körs i styrenheten.

Använd först händelsens namnutrymme innan du definierar klassen i din kontrollfil.

use Cake\Event\Event;

Lägg till metoden beforeFilter () i din styrenhet som visas nedan.

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

Du kan också använda initialize() .

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

Vidarebefordra variabler till Visa

Passera varje variabel för att visa åt gången

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

Passera flera variabler för att visa tillsammans via kompakt () -funktion

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

Hämtar inläggsdata motsvarande $ _POST

Du kan hämta inläggsdata som Array.

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

Du kan hämta inläggsdata för en viss nyckel.

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

Hämta specifikt nyckelvärde

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

Hämta specifikt nyckelvärde för kapslad matris

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

skillnaden mellan arraynotation och data() -metoden är att data() är felsäker och returnerar null om nyckeln inte finns i arrayen

så intead att göra

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

du kan göra

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

för CakePHP 3.4.x +

få all information:

$this->request->getData();

få en specifik nyckel:

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

För att ställa in tillgängliga data för getData-funktionen måste du göra något som:

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

användbart för att uppdatera modellerna i controller med statisk data

Ladda en annan modell i Controller

Som standard laddar CakePHP den relaterade modellen i regulatorn. För att ladda en annan modell i regulatorn använder du metoden loadModel ():

$this->loadModel('Articles');

eller ladda på flugan

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

Omdirigerar till en annan sida från Controller

Omdirigera till inom applikationen (en annan åtgärd från en specifik controller).

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

Omdirigera till referenssidan

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

Omdirigera till utanför applikationen eller specifik URL

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

Vidarebefordra variabel till åtgärd från URL med omdirigering

Skickar variabel i URL som metodens parameter

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

Url bör se ut så här http: // din_app_url / användare / profil / {id}

i metoden UsersController.php i fil ()

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

Passar variabel i URL som en frågesträng

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

Url ska se ut så här http: // din_app_url / användare / profil /? Id = {id}

i metoden UsersController.php i fil ()

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

Ställ in eller ändra applikationslayout

Ställ in standardlayout för hela applikationen . dvs. skapad layoutfil i /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
    }
}

Ställ in standardlayout för specifik åtgärd i applikationen . dvs. applikationer har olika layout på inloggningssidan i /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
    }
}

Ändra layout för specifik styrenhet . för dvs. du behöver olika layout för alla metoder för specifik styrenhet

klass UsersController utökar 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
    }
}

Ställ in Ajax Request Layout

Generellt i AJAX begäran inget behov av last CSS, JS. Utelämnar också annan HTML-kod.

Skapa ajax.ctp-fil i / src / Mall / Layout, och koden ska vara

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

Ställ in AJAX-baserad layout för hela applikationen i AppsController.php

klass AppsController utökar 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
}

}

Ladda komponenter i CakePHP

Vi kan ladda komponenter på två sätt.

  1. Genom att initialisera eller åsidosätta egenskapen $ komponenter i Controller
  2. Genom att använda loadComponent () -metoden i initiera () -metoden för Controller.

Way-1 Det bör åsidosättas laddningskomponent genom att AppsController.php laddar en eller flera komponenter

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

Way-2 Använd detta sätt när du behöver lastkomponenter dynamiskt för en specifik styrenhet. Ladda en komponent

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

Vad är initilaize () -metoden?

initialisera () introduceras i CakePHP-version> 3.0

Som kodstruktur ser det ut som för metoden BeforeFilter (). men det finns många skillnader mellan beforeFilter () och initialisera ().

  1. initialisera () kallas alltid efter att konstruktör har kallats. men innanFilter () ringer inte i fall av åtgärdsmetod som inte finns i en viss styrenhet.
  2. initialisera () -metoden används vanligtvis för att initialisera något som att lägga till nya komponenter och hjälpare. men i beforeFilter () används vanligtvis för att utföra någon global logisk del.

Återskapa data från frågesträngen motsvarande $ _GET

Du kan hämta frågesträngningsdata som Array.

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

Du kan hämta inläggsdata för en viss nyckel.

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

Hämta specifikt nyckelvärde

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

Hämta specifikt nyckelvärde för kapslad matris

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

Skapa tabell (modell) klass

Hur man skapar användarmodellklass

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
}

Modellföreningar i CakePHP

Det finns fyra typer av föreningar (relationer) som vi kan definiera i 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');
    }
}

I exemplet ovan kan du se fyra typer av relationer

Inlägg tillhör författare (En till en) , det betyder att i posts har en utländsk nyckel author_id som är associerad med id för authors .

Inlägget har många taggar (en till många) , det betyder att i tags har en utländsk nyckel post_id som är associerad med id för posts .

Inlägget har en taggar (Många till en eller en till en) , det betyder att i posts har en utländsk nyckel category_id som är associerad med id för categories .

Inlägget har och tillhör ämnen (många till många) , detta är många till många förhållanden mellan posts och topics . För att upprätthålla många till många förhållanden måste behöva skapa tredje tabell, tabell, posts_categories bör vara posts_categories . Fält i denna tabell som nämns nedan

  1. id (primär nyckel i tabellen)
  2. post_id (utländsk nyckel för posts )
  3. topic_id (utländsk nyckel till topics )


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow