Commit 708d5862 by Carsten Brandt

Merge pull request #5114 from larnu/master

Translate spanish docs
parents 8fa4899e 1cb7ee5f
...@@ -35,12 +35,12 @@ Estructura de una aplicación ...@@ -35,12 +35,12 @@ Estructura de una aplicación
* [Aplicaciones](structure-applications.md) * [Aplicaciones](structure-applications.md)
* [Componentes de una aplicación](structure-application-components.md) * [Componentes de una aplicación](structure-application-components.md)
* [Controladores](structure-controllers.md) * [Controladores](structure-controllers.md)
* [Modelos](structure-models.md) * **TBD** [Modelos](structure-models.md)
* [Vistas](structure-views.md) * [Vistas](structure-views.md)
* **TBD** [Filtros](structure-filters.md) * [Filtros](structure-filters.md)
* **TBD** [Widgets](structure-widgets.md) * [Widgets](structure-widgets.md)
* **TBD** [Módulos](structure-modules.md) * **TBD** [Módulos](structure-modules.md)
* [Recursos](structure-assets.md) * **TBD**[Recursos](structure-assets.md)
* **TBD** [Extensiones](structure-extensions.md) * **TBD** [Extensiones](structure-extensions.md)
...@@ -52,32 +52,32 @@ Gestión de las peticiones ...@@ -52,32 +52,32 @@ Gestión de las peticiones
* **TBD** [Peticiones](runtime-requests.md) * **TBD** [Peticiones](runtime-requests.md)
* **TBD** [Respuestas](runtime-responses.md) * **TBD** [Respuestas](runtime-responses.md)
* **TBD** [Sesiones y Cookies](runtime-sessions-cookies.md) * **TBD** [Sesiones y Cookies](runtime-sessions-cookies.md)
* [Procesamiento y generación de las URL](runtime-url-handling.md) * **TBD** [Procesamiento y generación de las URL](runtime-url-handling.md)
* [Gestión de errores](runtime-handling-errors.md) * **TBD** [Gestión de errores](runtime-handling-errors.md)
* [Registro de anotaciones](runtime-logging.md) * **TBD** [Registro de anotaciones](runtime-logging.md)
Conceptos clave Conceptos clave
--------------- ---------------
* [Componentes](concept-components.md) * [Componentes](concept-components.md)
* [Propiedades](concept-properties.md) * **TBD** [Propiedades](concept-properties.md)
* [Eventos](concept-events.md) * **TBD** [Eventos](concept-events.md)
* [Comportamientos (Behaviors)](concept-behaviors.md) * [Comportamientos (Behaviors)](concept-behaviors.md)
* [Configuraciones](concept-configurations.md) * **TBD** [Configuraciones](concept-configurations.md)
* [Alias](concept-aliases.md) * [Alias](concept-aliases.md)
* [Autocarga de clases](concept-autoloading.md) * [Autocarga de clases](concept-autoloading.md)
* [Localizador de servicios (Service Locator)](concept-service-locator.md) * **TBD** [Localizador de servicios (Service Locator)](concept-service-locator.md)
* [Contenedor de inyección de dependencia](concept-di-container.md) * **TBD** [Contenedor de inyección de dependencia](concept-di-container.md)
Trabajar con bases de datos Trabajar con bases de datos
----------------------------- -----------------------------
* [Objeto de acceso a datos](db-dao.md) - Conexión a una base de datos, consultas básicas, transacciones y manipulación de esquemas * **TBD** [Objeto de acceso a datos](db-dao.md) - Conexión a una base de datos, consultas básicas, transacciones y manipulación de esquemas
* [Constructor de consultas](db-query-builder.md) - Consulta de la base de datos utilizando una simple capa de abstracción * **TBD** [Constructor de consultas](db-query-builder.md) - Consulta de la base de datos utilizando una simple capa de abstracción
* [Active Record](db-active-record.md) - ORM Active Record, recuperación y manipulación de registros y definición de relaciones * **TBD** [Active Record](db-active-record.md) - ORM Active Record, recuperación y manipulación de registros y definición de relaciones
* [Migraciones](db-migrations.md) - Control de versiones de bases de datos en el entorno de desarrollo en equipo * **TBD** [Migraciones](db-migrations.md) - Control de versiones de bases de datos en el entorno de desarrollo en equipo
* **TBD** [Sphinx](db-sphinx.md) * **TBD** [Sphinx](db-sphinx.md)
* **TBD** [Redis](db-redis.md) * **TBD** [Redis](db-redis.md)
* **TBD** [MongoDB](db-mongodb.md) * **TBD** [MongoDB](db-mongodb.md)
...@@ -87,8 +87,8 @@ Trabajar con bases de datos ...@@ -87,8 +87,8 @@ Trabajar con bases de datos
Obtener datos de los usuarios Obtener datos de los usuarios
----------------------------- -----------------------------
* [Crear formularios](input-forms.md) * **TBD** [Crear formularios](input-forms.md)
* [Validar datos](input-validation.md) * **TBD** [Validar datos](input-validation.md)
* **TBD** [Subir archivos](input-file-upload.md) * **TBD** [Subir archivos](input-file-upload.md)
* **TBD** [Obtener datos para múltiples modelos](input-multiple-models.md) * **TBD** [Obtener datos para múltiples modelos](input-multiple-models.md)
...@@ -99,17 +99,17 @@ Visualizar datos ...@@ -99,17 +99,17 @@ Visualizar datos
* **TBD** [Formato de datos](output-formatting.md) * **TBD** [Formato de datos](output-formatting.md)
* **TBD** [Paginación](output-pagination.md) * **TBD** [Paginación](output-pagination.md)
* **TBD** [Ordenación](output-sorting.md) * **TBD** [Ordenación](output-sorting.md)
* [Proveedores de datos](output-data-providers.md) * **TBD** [Proveedores de datos](output-data-providers.md)
* [Widgets de datos](output-data-widgets.md) * **TBD** [Widgets de datos](output-data-widgets.md)
* [Utilización de temas](output-theming.md) * **TBD** [Utilización de temas](output-theming.md)
Seguridad Seguridad
--------- ---------
* [Autenticación](security-authentication.md) * **TBD** [Autenticación](security-authentication.md)
* [Autorización](security-authorization.md) * **TBD** [Autorización](security-authorization.md)
* [Trabajar con contraseñas](security-passwords.md) * **TBD** [Trabajar con contraseñas](security-passwords.md)
* **TBD** [Auth Clients](security-auth-clients.md) * **TBD** [Auth Clients](security-auth-clients.md)
* **TBD** [Buenas prácticas](security-best-practices.md) * **TBD** [Buenas prácticas](security-best-practices.md)
...@@ -127,58 +127,58 @@ Caché ...@@ -127,58 +127,58 @@ Caché
Servicios Web RESTful Servicios Web RESTful
--------------------- ---------------------
* [Guía breve](rest-quick-start.md) * **TBD** [Guía breve](rest-quick-start.md)
* [Recursos (Resources)](rest-resources.md) * **TBD** [Recursos (Resources)](rest-resources.md)
* [Controladores](rest-controllers.md) * **TBD** [Controladores](rest-controllers.md)
* [Gestión de rutas](rest-routing.md) * **TBD** [Gestión de rutas](rest-routing.md)
* [Formateo de respuestas](rest-response-formatting.md) * **TBD** [Formateo de respuestas](rest-response-formatting.md)
* [Autenticación](rest-authentication.md) * **TBD** [Autenticación](rest-authentication.md)
* [Límite de Rango](rest-rate-limiting.md) * **TBD** [Límite de Rango](rest-rate-limiting.md)
* [Gestión de versiones](rest-versioning.md) * **TBD** [Gestión de versiones](rest-versioning.md)
* [Gestión de errores](rest-error-handling.md) * **TBD** [Gestión de errores](rest-error-handling.md)
Herramientas de Desarrollo Herramientas de Desarrollo
-------------------------- --------------------------
* [Depurador y Barra de Herramientas de Depuración](tool-debugger.md) * **TBD** [Depurador y Barra de Herramientas de Depuración](tool-debugger.md)
* [Generación de códigos con Gii](tool-gii.md) * **TBD** [Generación de códigos con Gii](tool-gii.md)
* **TBD** [Generación de documentación de API](tool-api-doc.md) * **TBD** [Generación de documentación de API](tool-api-doc.md)
Pruebas Pruebas
------ ------
* [Información general](test-overview.md) * **TBD** [Información general](test-overview.md)
* **TBD** [Pruebas unitarias](test-unit.md) * **TBD** [Pruebas unitarias](test-unit.md)
* **TBD** [Pruebas funcionales](test-functional.md) * **TBD** [Pruebas funcionales](test-functional.md)
* **TBD** [Pruebas de aceptación](test-acceptance.md) * **TBD** [Pruebas de aceptación](test-acceptance.md)
* [Fixtures](test-fixtures.md) * **TBD** [Fixtures](test-fixtures.md)
Extender Yii Extender Yii
------------ ------------
* [Crear extensiones](extend-creating-extensions.md) * **TBD** [Crear extensiones](extend-creating-extensions.md)
* [Personalizar el código de base](extend-customizing-core.md) * **TBD** [Personalizar el código de base](extend-customizing-core.md)
* [Utilizar librerías de terceros](extend-using-libs.md) * **TBD** [Utilizar librerías de terceros](extend-using-libs.md)
* **TBD** [Utilizar Yii en sistemas de terceros](extend-embedding-in-others.md) * **TBD** [Utilizar Yii en sistemas de terceros](extend-embedding-in-others.md)
* **TBD** [Utilizar las versiones 1.1 y 2.0 de Yii juntas](extend-using-v1-v2.md) * **TBD** [Utilizar las versiones 1.1 y 2.0 de Yii juntas](extend-using-v1-v2.md)
* [Utilizar Composer](extend-using-composer.md) * **TBD** [Utilizar Composer](extend-using-composer.md)
Temas especiales Temas especiales
---------------- ----------------
* [Plantilla aplicación avanzada](tutorial-advanced-app.md) * **TBD** [Plantilla aplicación avanzada](tutorial-advanced-app.md)
* [Creación de una aplicación desde cero](tutorial-start-from-scratch.md) * **TBD** [Creación de una aplicación desde cero](tutorial-start-from-scratch.md)
* [Comandos de consola](tutorial-console.md) * **TBD** [Comandos de consola](tutorial-console.md)
* [Validadores de base](tutorial-core-validators.md) * **TBD** [Validadores de base](tutorial-core-validators.md)
* [Internacionalización](tutorial-i18n.md) * **TBD** [Internacionalización](tutorial-i18n.md)
* [Envío de correos electrónicos](tutorial-mailing.md) * **TBD** [Envío de correos electrónicos](tutorial-mailing.md)
* [Mejora del rendimiento](tutorial-performance-tuning.md) * **TBD** [Mejora del rendimiento](tutorial-performance-tuning.md)
* **TBD** [Entorno de alojamiento compartido](tutorial-shared-hosting.md) * **TBD** [Entorno de alojamiento compartido](tutorial-shared-hosting.md)
* [Motores de plantillas](tutorial-template-engines.md) * **TBD** [Motores de plantillas](tutorial-template-engines.md)
Widgets Widgets
...@@ -192,14 +192,14 @@ Widgets ...@@ -192,14 +192,14 @@ Widgets
* Menu: link to demo page * Menu: link to demo page
* LinkPager: link to demo page * LinkPager: link to demo page
* LinkSorter: link to demo page * LinkSorter: link to demo page
* [Bootstrap Widgets](bootstrap-widgets.md) * **TBD** [Bootstrap Widgets](bootstrap-widgets.md)
* **TBD** [Jquery UI Widgets](jui-widgets.md) * **TBD** [Jquery UI Widgets](jui-widgets.md)
Clases auxiliares Clases auxiliares
----------------- -----------------
* [Información general](helper-overview.md) * **TBD** [Información general](helper-overview.md)
* **TBD** [ArrayHelper](helper-array.md) * **TBD** [ArrayHelper](helper-array.md)
* **TBD** [Html](helper-html.md) * **TBD** [Html](helper-html.md)
* **TBD** [Url](helper-url.md) * **TBD** [Url](helper-url.md)
......
Script de Entrada
=============
El script de entrada es el primer eslabón en el proceso de arranque de la aplicación. Una aplicación (ya sea una aplicación Web o una aplicación de consola) tiene un único script de entrada. Los usuarios finales hacen peticiones al script de entrada que instancia instancias de aplicación y remite la petición a estos.
El script de entrada para aplicaciones Web tiene que estar alojado bajo niveles de directorios accesibles para la Web de manera que puedan ser accesibles para los usuarios. Normalmente se nombra como 'index.php', pero también pueden usar cualquier otro nombre, los servidores Web proporcionados pueden localizarlo.
El script de entrada para aplicaciones de consola normalmente está alojado bajo la [ruta base](structure-applications.md#yiibaseapplicationbasepathbasepath-) de las aplicaciones y es nombrado como 'yii' (con el sufijo '.php'). Estos deberían ser ejecutables para que los usuarios puedan ejecutar las aplicaciones de consola a través del comando './yii <ruta> [argumentos] [opciones]'.
El script de entrada principalmente hace los siguientes trabajos:
* Definir las constantes globales;
* Registrar el [cargador automático de Composer](http://getcomposer.org/doc/01-basic-usage.md#autoloading);
* Incluir el archivo de clase [[Yii]];
* Cargar la configuración de la aplicación;
* Crear y configurar una instancia de [aplicación](structure-applications.md);
* Llamar a [[yii\base\Application::run()]] para procesar la petición entrante.
## Aplicaciones Web <a name="web-applications"></a>
El siguiente código es el script de entrada para la [Plantilla de Aplicación web Básica](start-installation.md).
```php
<?php
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
// registrar el cargador automático de Composer
require(__DIR__ . '/../vendor/autoload.php');
// incluir el fichero de clase Yii
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
// cargar la configuración de la aplicación
$config = require(__DIR__ . '/../config/web.php');
// crear, configurar y ejecutar la aplicación
(new yii\web\Application($config))->run();
```
## Aplicaciones de consola <a name="console-applications"></a>
De la misma manera, el siguiente código es el script de entrada para la [aplicación de consola](tutorial-console.md):
```php
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
defined('YII_DEBUG') or define('YII_DEBUG', true);
// el fcgi no tiene STDIN y STDOUT definidos por defecto
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
// registrar el cargador automático de Composer
require(__DIR__ . '/vendor/autoload.php');
// incluir el fichero de clase Yii
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
// cargar la configuración de la aplicación
$config = require(__DIR__ . '/config/console.php');
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
```
## Definición de Constantes <a name="defining-constants"></a>
El script de entrada es el mejor lugar para definir constantes globales. Yii soporta las siguientes tres constantes:
* `YII_DEBUG`: especifica si la aplicación se está ejecutando en modo depuración. Cuando esta en modo depuración, una aplicación mantendrá más información de registro, y revelará detalladas pilas de errores si se lanza una excepción. Por esta razón, el modo depuración debería ser usado principalmente durante el desarrollo. El valor por defecto de 'YII_DEBUG' es falso.
* `YII_ENV`: especifica en que entorno se esta ejecutando la aplicación. Se puede encontrar una descripción más detallada en la sección [Configuraciones](concept-configurations.md#environment-constants).
El Valor por defecto de 'YII_ENV' es ''prod'', que significa que la aplicación se esta ejecutando en el entorno de producción.
* `YII_ENABLE_ERROR_HANDLER`: especifica si se habilita el gestor de errores proporcionado por Yii. El valor por defecto de esta constante es verdadero.
Cuando se define una constante, a menudo se usa código como el siguiente:
```php
defined('YII_DEBUG') or define('YII_DEBUG', true);
```
que es equivalente al siguiente código:
```php
if (!defined('YII_DEBUG')) {
define('YII_DEBUG', true);
}
```
Claramente el primero es más breve y fácil de entender.
La definición de constantes debería hacerse al principio del script de entrada para que pueda tener efecto cuando se incluyan otros archivos PHP.
Widgets
=======
Los Widgets son bloques de código reutilizables utilizados en las [vistas](structure-views.md) para crear elementos de interfaz de usuario complejos y configurables de forma orientada a objetos. Por ejemplo, widget selector de fechas puede generar un selector de fechas de lujo que permita a los usuarios seleccionar una fecha. Todo lo que se tiene que hacer es insertar el siguiente código en una vista.
```php
<?php
use yii\jui\DatePicker;
?>
<?= DatePicker::widget(['name' => 'date']) ?>
```
Hay un buen número de widgets incluidos en Yii, tales como [[yii\widgets\ActiveForm|active form]], [[yii\widgets\Menu|menu]], [Widgets de jQuery UI](widget-jui.md), [widgets de Twitter Bootstrap](widget-bootstrap.md). En adelante, introduciremos las nociones básicas acerca de los widgets. Por favor, refiérase a la documentación de la API de clases si quiere aprender más acerca de el uso de un widget en particular.
## Uso de los Widgets <a name="using-widgets"></a>
Los Widgets son usados principalmente en las [vistas](structure-views.md). Se puede llamar al método [[yii\base\Widget::widget()]] para usar un widget en una vista. El método obtiene un array de [configuración](concept-configurations.md) para inicializar el widget y retorna la representación resultante del widget. Por ejemplo, el siguiente código inserta un widget selector de fechas que esta configurado para usar el idioma Ruso y mantener la entrada en atributo 'form_date' del '$model'.
```php
<?php
use yii\jui\DatePicker;
?>
<?= DatePicker::widget([
'model' => $model,
'attribute' => 'from_date',
'language' => 'ru',
'clientOptions' => [
'dateFormat' => 'yy-mm-dd',
],
]) ?>
```
Algunos widgets pueden coger un bloque de contenido que debería encontrarse entre la invocación de [[yii\base\Widget::begin()]] y [[yii\base\Widget::end()]]. Por ejemplo, el siguiente código usa el widget [[yii\widgets\ActiveForm]] para generar un formulario de inicio de sesión. El widget generara las etiquetas '<form>' de apertura y cierre donde sean llamados 'begin()' y 'end()', respectivamente. Cualquier cosa que este en medio será representado como tal.
```php
<?php
use yii\widgets\ActiveForm;
use yii\helpers\Html;
?>
<?php $form = ActiveForm::begin(['id' => 'login-form']); ?>
<?= $form->field($model, 'username') ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<div class="form-group">
<?= Html::submitButton('Login') ?>
</div>
<?php ActiveForm::end(); ?>
```
Hay que tener en cuenta que a diferencia de [[yii\base\Widget::widget()]] que devuelve la representación resultante del widget, el método [[yii\base\Widget::begin()]] devuelve una instancia del widget que se puede usar para generar el contenido del widget.
## Creación Widgets <a name="creating-widgets"></a>
Para crear un widget, se debe extender a [[yii\base\Widget]] y sobrescribir los métodos [[yii\base\Widget::init()]] y/o [[yii\base\Widget::run()]]. Normalmente el método 'init()' debería contener el código que estandariza las propiedades del widget, mientras que el método 'run()' debería contener el código que genere la representación resultante del widget. La representación resultante pude ser "pitada" directamente o devuelta como una cadena por el método 'run()'.
En el siguiente ejemplo, 'HelloWidget' codifica en HTML y muestra el contenido asignado a su propiedad 'message'. Si la propiedad no esta establecida, mostrara "Hello World" por defecto.
```php
namespace app\components;
use yii\base\Widget;
use yii\helpers\Html;
class HelloWidget extends Widget
{
public $message;
public function init()
{
parent::init();
if ($this->message === null) {
$this->message = 'Hello World';
}
}
public function run()
{
return Html::encode($this->message);
}
}
```
Para usar este widget, simplemente inserte el siguiente código en una vista:
```php
<?php
use app\components\HelloWidget;
?>
<?= HelloWidget::widget(['message' => 'Good morning']) ?>
```
A se muestra una variante de 'HelloWidget' obtiene el contenido contenido entre las llamadas 'begin()' y 'end()', lo codifica en HTML y posteriormente lo muestra.
```php
namespace app\components;
use yii\base\Widget;
use yii\helpers\Html;
class HelloWidget extends Widget
{
public function init()
{
parent::init();
ob_start();
}
public function run()
{
$content = ob_get_clean();
return Html::encode($content);
}
}
```
Como se puede observar, el búfer de salida PHP es iniciado en 'init()' por tanto cualquier salida entre las llamadas de 'init()' y 'run()' puede ser capturada, procesada y devuelta en 'run()'.
>Info: Cuando se llama a [[yii\base\Widget::begin()]], se creara una nueva instancia del widget y el método 'init()' sera llamado al final del constructor del widget. Cuando se llama [[yii\base\Widget::end()]], el método 'run()' será llamado el resultado que devuelva sera escrito por 'end()'.
El siguiente código muestra como usar esta nueva variante de 'HelloWidget':
```php
<?php
use app\components\HelloWidget;
?>
<?php HelloWidget::begin(); ?>
content that may contain <tag>'s
<?php HelloWidget::end(); ?>
```
A veces, un widget puede necesitar representar una gran cantidad de contenido. Mientras que se puede incrustar el contenido dentro del método 'run()', ponerlo dentro de una [vista](structure-views.md) y llamar [[yii\base\Widget::render()]] para representarla, es un mejor enfoque. Por ejemplo:
```php
public function run()
{
return $this->render('hello');
}
```
Por defecto, las vistas para un widget deberían encontrarse en ficheros dentro del directorio 'WidgetPath/views', donde 'WidgetPath' representa el directorio que contiene el fichero de clase del widget. Por lo tanto, el anterior ejemplo representara el fichero de vista `@app/components/views/hello.php`, asumiendo que la clase del widget se encuentre en `@app/components`. Se puede sobrescribir el método [[yii\base\Widget::getViewPath()]] para personalizar el directorio que contenga los ficheros de vista del widget.
## Mejores Practicas <a name="best-practices"></a>
Los widgets son una manera orientada a objetos de reutilizar código de vistas.
Cuando se crean widgets, se debería continuar manteniendo el patrón MVC. En general, se debería mantener la lógica en las clases del widget y mantener la presentación en las [vistas](structure-views.md).
Los widgets deberían ser diseñados para ser autónomos. Es decir, cuando se usa un widget, se debería poder poner en una vista sin hacer nada más. Esto puede resultar complicado si un widget requiere recursos externos, tales como CSS, JavaScript, imágenes, etc. Afortunadamente Yii proporciona soporte para [paquetes asset](structure-asset-bundles.md) que pueden ser utilizados para resolver el problema.
Cuando un widget solo contiene código de vista, este es muy similar a una [vista](structure-views.md). De hecho, en este caso, su única diferencia es que un widget es una clase redistribuible, mientras que una vista es solo un script PHP llano que prefiere mantener dentro de su aplicación.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment