From 7844f798d6e6e1eea6b47b02e7ee3dce2bd10e3e Mon Sep 17 00:00:00 2001 From: Antonio Ramirez <amigo.cobos@gmail.com> Date: Mon, 30 Jun 2014 12:52:33 +0200 Subject: [PATCH] add concept-components.md --- docs/guide-es/concept-components.md | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 docs/guide-es/concept-components.md diff --git a/docs/guide-es/concept-components.md b/docs/guide-es/concept-components.md new file mode 100644 index 0000000..c341f86 --- /dev/null +++ b/docs/guide-es/concept-components.md @@ -0,0 +1,100 @@ +Componentes +=========== + +Los componentes son los principales bloques de construcción de las aplicaciones Yii. Los componentes son instancias de +[[yii\base\Component]] o de una clase extendida. Las tres características principales que los componentes proporcionan +a las otras clases son: + +* [Propiedades](concept-properties.md) +* [Eventos](concept-events.md) +* [Comportamientos](concept-behaviors.md), + +Por separado y combinadas, estas características hacen que las clases Yii sean mucho mas personalizables y sean mucho +más fáciles de usar. Por ejemplo, el incluido [[yii\jui\DatePicker|widget de selección de fecha]], un componente de la +interfaz de usuario, puede ser utilizado en una [vista](structure-view.md) para generar un selector de fechas interactivo: + +```php +use yii\jui\DatePicker; + +echo DatePicker::widget([ + 'language' => 'ru', + 'name' => 'country', + 'clientOptions' => [ + 'dateFormat' => 'yy-mm-dd', + ], +]); +``` + +Las propiedades del widget son facilmente modificables porque la clase se extiende de [[yii\base\Component]]. + +Mientras que los componentes son muy potentes, son un poco más pesados que los objetos normales, debido al hecho de que +necesitan más memoria y tiempo de CPU para poder soportar [eventos](concept-events.md) y [comportamientos](concept-behaviors.md) en particular. +Si tus componentes no necesitan estas dos características, deberías considerar extender tu componente directamente de +[[yii\base\Object]] en vez de [[yii\base\Component]]. De esta manera harás que tus componentes sean mucho más eficientes que +que objetos PHP normales, pero con el añadido soporte para [propiedades](concept-properties.md). + +Cuando extiendes tu clase de [[yii\base\Component]] o [[yii\base\Object]], se recomienda que sigas las siguientes +convenciones: + +- Si sobrescribes el constructor, especifica un parámetro `$config` como el *último* parámetro del constructor, y después + pasa este parámetro al constructor de la clase "padre". +- Siempre llama al constructor del "padre" al *final* de su propio constructor. +- Si sobrescribes el método [[yii\base\Object::init()]], asegúrate de que llamas a la implementación de la clase "padre" + *al principio* de tu método `init`. + +Por ejemplo: + +```php +namespace yii\components\MyClass; + +use yii\base\Object; + +class MyClass extends Object +{ + public $prop1; + public $prop2; + + public function __construct($param1, $param2, $config = []) + { + // ... inicialización antes de la configuración está siendo aplicada + + parent::__construct($config); + } + + public function init() + { + parent::init(); + + // ... inicialización despues de la configuración esta siendo aplicada + } +} +``` + +Siguiendo esas directrices hará que tus componentes sean [configurables](concept-configurations.md) cuando son creados. Por ejemplo: + +```php +$component = new MyClass(1, 2, ['prop1' => 3, 'prop2' => 4]); +// alternativamente +$component = \Yii::createObject([ + 'class' => MyClass::className(), + 'prop1' => 3, + 'prop2' => 4, +], [1, 2]); +``` + +> Información: Mientras que el enfoque de llamar [[Yii::createObject()]] parece mucho más complicado, es mucho más potente + debido al hecho de que se implementa en la parte superior de un [contenedor de inyección de dependencia](concept-di-container.md). + + +La clase [[yii\base\Object]] hace cumplir el siguiente ciclo de vida del objeto: + +1. Pre-inicialización en el constructor. Puedes establecer los valores predeterminados de propiedades aquí. +2. Configuración del objeto a través de `$config`. La configuración puede sobrescribir los valores prdeterminados dentro + del constructor. +3. Post-inicialización dentro de [[yii\base\Object::init()|init()]]. Puedes sobrescribir este método para realizar + comprobaciones de validez y normalización de las propiedades. +4. LLamadas a métodos del objeto. + + +Los tres primeros pasos ocurren dentro del constructor del objeto. Esto significa que una vez obtengas la instancia de +un objeto, ésta ha sido inicializada para que puedas utilizarla adecuadamente. -- libgit2 0.27.1