mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-14 05:08:42 +08:00
Translate docs(concept-components.md) to russian.
This commit is contained in:
91
docs/guide-ru/concept-components.md
Normal file
91
docs/guide-ru/concept-components.md
Normal file
@@ -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. Вызов методов объекта.
|
||||||
|
|
||||||
|
*Первые три шага всегда выполняются из конструктора объекта.* Это значит, что если вы получите экземпляр объекта, он уже будет проинициализирован и готов к работе.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user