From 7ecf6867a852c261f5969a9eeaa8e8ce22edc1c6 Mon Sep 17 00:00:00 2001 From: HaruAtari Date: Thu, 19 Jun 2014 22:58:45 +0400 Subject: [PATCH] Translate docs(concept-components.md) to russian. --- docs/guide-ru/concept-components.md | 91 +++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 docs/guide-ru/concept-components.md diff --git a/docs/guide-ru/concept-components.md b/docs/guide-ru/concept-components.md new file mode 100644 index 0000000000..451d836851 --- /dev/null +++ b/docs/guide-ru/concept-components.md @@ -0,0 +1,91 @@ +Компоненты +========== + +Компоненты - это главные строительные блоки приложений основанных на Yii. Компоненты наследуются от класса [[yii\base\Component]] или его наследников. Три главные возможности, которые компоненты предоставляют для других классов: + +* [Свойства](concept-properties.md) +* [События](concept-events.md) +* [Поведения](concept-behaviors.md), + +Разделение и комбинирование этих возможностей делает классы Yii более простыми в настройке и использовании. *Например, пользовательские компоненты, включающие в себя [[yii\jui\DatePicker|виджет выбора даты]], могут быть использованы в [представлении](structure-view.md) для генерации интерактивных элементов выбора даты:* + +```php +use yii\jui\DatePicker; + +echo DatePicker::widget([ + 'language' => 'ru', + 'name' => 'country', + 'clientOptions' => [ + 'dateFormat' => 'yy-mm-dd', + ], +]); +``` + +Свойства виджета легко доступны для записи потому, что его класс унаследован от класса [[yii\base\Component]]. + +Компоненты - очень мощный инструмент. Но в то же время они немного тяжелее обычных объектов, потому что на поддержку [событий](concept-events.md) и [поведений](concept-behaviors.md) тратится дополнительные память и процессорное время. Если ваши компоненты не нуждаются в этих двух возможностях, вам стоит унаследовать их от [[yii\base\Object]], а не от [[yii\base\Component]]. Поступив так, вы сделаете ваши компоненты такими же эффективными, как и обычные PHP объекты, но с поддержкой [свойств](concept-properties.md). + +При наследовании ваших классов от [[yii\base\Component]] или [[yii\base\Object]], рекомендуется следовать некоторым соглашениям: + +- Если вы переопределяете конструктор, то добавьте *последним* аргументом параметр `$config` и затем передайте его в конструктор предка. +- Всегда вызывайте конструктор предка *в конце* вашего переопределенного конструктора. +- Если вы переопределяете метод [[yii\base\Object::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 = []) + { + // ... инициализация происходит перед тем, как будет применена конфигурация. + + parent::__construct($config); + } + + public function init() + { + parent::init(); + + // ... инициализация происходит после того, как была применена конфигурация. + } +} +``` + +Следовуя этому руководству вы позволите [настраивать](concept-configurations.md) ваш компонент при создании. Например: + +```php +$component = new MyClass(1, 2, ['prop1' => 3, 'prop2' => 4]); +// альтернативный способ +$component = \Yii::createObject([ + 'class' => MyClass::className(), + 'prop1' => 3, + 'prop2' => 4, +], [1, 2]); +``` + +> Информация: Способ инициализации через вызов [[Yii::createObject()]] выглядит более сложным. Но в то же время он более мощный из-за того, что он реализован на самом верху [контейнера внедрения зависимостей](concept-di-container.md). + +Жизненый цикл объектов класса [[yii\base\Object]] содержит следующие этапы: + +1. Предварительная инициализация в конструкторе. Здесь вы можете установить значения свойст по умолчанию. +2. Конфигурация объекта с помощью `$config`. Во время конфигурации могут быть перезаписаны значения свойст по умолчанию, установленные в кострукторе. +3. Конфигурация после инициализации в методе [[yii\base\Object::init()|init()]]. Вы можете переопределить этот метод, для проверки готовности объекта и нормализации свойств. +4. Вызов методов объекта. + +*Первые три шага всегда выполняются из конструктора объекта.* Это значит, что если вы получите экземпляр объекта, он уже будет проинициализирован и готов к работе. + + + + + + + +