2016-04-15 3 views
0

В CakePHP 2 вы можете указать, какие компоненты загружать в контроллер, предоставляя свойство $components.CakePHP 3 - Как загрузить компоненты

class AppController extends Controller 
{ 

    public $components = [ 
     'RequestHandler', 
     'Security' 
    ]; 
} 

Я замечаю это по-прежнему работает в CakePHP 3, но что большая часть книги использует новый метод, в котором при загрузке каждого компонента по отдельности:

public function initialize() 
{ 
    $this->loadComponent('RequestHandler'); 
    $this->loadComponent('Security'); 
} 

ли $components имущество, предоставляемое только для обратной совместимости? Я хочу сделать правильный путь 3-го торта, особенно если прежний метод будет устаревать в какой-то момент в будущем.


Существует ли какое-либо различие в функциональности между этими двумя методами?

Если я пытаюсь настроить SecurityComponent как это, он не работает, и конфигурация, кажется, полностью игнорируются, несмотря на то, что это допустимое использование метода:

public function initialize() 
{ 
    $this->loadComponent('Security', ['blackHoleCallback', 'blackhole']); 
} 

Вместо этого, у меня есть сделать отдельный вызов метода в beforeFilter() для установки конфигурации и заставить его работать на самом деле:

public function initialize() 
{ 
    $this->loadComponent('Security'); 
} 

public function beforeFilter(Event $event) 
{ 
    $this->Security->config('blackHoleCallback', 'blackhole'); 
} 

Однако, старый «Cake 2» способ все еще работает отлично:

class AppController extends Controller 
{ 

    public $components = [ 
     'RequestHandler', 
     'Security' => ['blackHoleCallback' => 'blackhole'] 
    ]; 
} 

ответ

1

Является ли свойство $ components предоставленным только для обратной совместимости? Я хочу сделать правильный путь 3-го торта, особенно если прежний метод будет устаревать в какой-то момент в будущем.

Это еще не устарело as you can see here. Но загрузка его с помощью вызова метода - лучший способ сделать это. Я предполагаю, что свойство будет сброшено в 4.x и, возможно, устарело в будущей версии 3.x.

Читайте эти, а также:

Смежные вопросы