Компоненты
Компоненты являются основными строительными блоками приложений Yii. Компоненты представляют собой экземпляры yii\base\Component или расширенного класса. Три основных функции, которые компоненты предоставляют другим классам, это:
По отдельности и в комбинации, эти функции делают классы Yii гораздо более настраиваемыми и удобными в использовании. Например, встроенный виджет выбора даты, компонент пользовательского интерфейса, может использоваться в представлении для создания интерактивного виджета выбора даты:
use yii\jui\DatePicker;
echo DatePicker::widget([
'language' => 'ru',
'name' => 'country',
'clientOptions' => [
'dateFormat' => 'yy-mm-dd',
],
]);
Свойства виджета легко изменяются, поскольку класс расширяет yii\base\Component.
Хотя компоненты очень мощные, они немного тяжелее обычных объектов, поскольку для поддержки функциональности событий и поведений требуется дополнительная память и время ЦП. Если вашим компонентам не нужны эти две функции, вы можете рассмотреть возможность расширения своего класса компонента от yii\base\Object вместо yii\base\Component. Это сделает ваши компоненты такими же эффективными, как обычные PHP объекты, но с добавленной поддержкой свойств.
При расширении своего класса от yii\base\Component или yii\base\Object, рекомендуется придерживаться следующих соглашений:
- Если вы переопределяете конструктор, укажите параметр
$configв качестве последнего параметра конструктора, а затем передайте этот параметр родительскому конструктору. - Всегда вызывайте родительский конструктор в конце переопределённого конструктора.
- Если вы переопределяете метод yii\base\Object::init(), убедитесь, что вызываете родительскую реализацию
init()в начале вашегоinit()метода.
Например:
<?php
namespace yii\components\MyClass;
use yii\base\Object;
class MyClass extends Object
{
public $prop1;
public $prop2;
public function __construct($param1, $param2, $config = [])
{
// ... initialization before configuration is applied
parent::__construct($config);
}
public function init()
{
parent::init();
// ... initialization after configuration is applied
}
}
Следование этим рекомендациям сделает ваши компоненты настраиваемыми при их создании. Например:
$component = new MyClass(1, 2, ['prop1' => 3, 'prop2' => 4]);
// alternatively
$component = \Yii::createObject([
'class' => MyClass::className(),
'prop1' => 3,
'prop2' => 4,
], [1, 2]);
Информация: Хотя подход с вызовом Yii::createObject() выглядит сложнее, он более мощный, потому что реализован на базе контейнера внедрения зависимостей.
Класс yii\base\Object обеспечивает следующий жизненный цикл объекта:
- Предварительная инициализация внутри конструктора. Здесь вы можете установить значения свойств по умолчанию.
- Настройка объекта с помощью
$config. Настройка может перезаписать значения по умолчанию, установленные внутри конструктора. - Постиннициализация в методе init(). Вы можете переопределить этот метод для выполнения проверок целостности и нормализации свойств.
- Вызовы методов объекта.
Первые три шага происходят внутри конструктора объекта. Это означает, что как только вы получите экземпляр класса (т.е. объект), этот объект уже будет инициализирован в надлежащем, надежном состоянии.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc-2.0/guide-concept-components.html