В 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']
];
}