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