Commit da904f76 by Luciano Baraglia

Spanish guide polish and start-looking-head.md [skip ci]

parent 79d6616c
...@@ -5,22 +5,22 @@ En esta sección, describiremos como crear una nueva página para solicitar info ...@@ -5,22 +5,22 @@ En esta sección, describiremos como crear una nueva página para solicitar info
La página mostrará un formulario con un campo de input para el nombre y un campo de input para el email. La página mostrará un formulario con un campo de input para el nombre y un campo de input para el email.
Después de recibir estos datos del usuario, la página le mostrará la información de vuelta al usuario para la confirmación. Después de recibir estos datos del usuario, la página le mostrará la información de vuelta al usuario para la confirmación.
Para lograr este objetivo, además de crear un [action](structure-controllers.md) (acción) y Para lograr este objetivo, además de crear una [acción](structure-controllers.md) y
dos [views](structure-views.md) (vistas), también crearás un [model](structure-models.md) (modelo). dos [vistas](structure-views.md), también crearás un [modelo](structure-models.md).
A través de este tutorial, aprenderás A través de este tutorial, aprenderás
* Cómo crear un [model](structure-models.md) para representar los datos ingresados por un usuario; * Cómo crear un [modelo](structure-models.md) para representar los datos ingresados por un usuario;
* Cómo declarar reglas para validar los datos ingresado por los usuarios; * Cómo declarar reglas para validar los datos ingresado por los usuarios;
* Cómo construir un formulario HTML en un [view](structure-views.md). * Cómo construir un formulario HTML en una [vista](structure-views.md).
Creando un Modelo <a name="creating-model"></a> Creando un Modelo <a name="creating-model"></a>
----------------- -----------------
Para representar los datos ingresados por un usuario, crea una clase modelo `EntryForm` cómo se muestra abajo y Para representar los datos ingresados por un usuario, crea una clase modelo `EntryForm` cómo se muestra abajo y
guarda la clase en el archivo `models/EntryForm.php`. Por favor ver la sección [Class Autoloading](concept-autoloading.md) guarda la clase en el archivo `models/EntryForm.php`. Por favor ver la sección [Autocargando Clases](concept-autoloading.md)
para más detalles acerca de la convención de como nombrar los archivos de clase. para más detalles acerca de la convención de nombres de los archivos de clase.
```php ```php
<?php <?php
...@@ -89,7 +89,7 @@ class SiteController extends Controller ...@@ -89,7 +89,7 @@ class SiteController extends Controller
return $this->render('entry-confirm', ['model' => $model]); return $this->render('entry-confirm', ['model' => $model]);
} else { } else {
// La página es mostrada inicialmente o hay algún error de validación // la página es mostrada inicialmente o hay algún error de validación
return $this->render('entry', ['model' => $model]); return $this->render('entry', ['model' => $model]);
} }
} }
...@@ -98,15 +98,15 @@ class SiteController extends Controller ...@@ -98,15 +98,15 @@ class SiteController extends Controller
La acción primero crea un objeto `EntryForm`. Luego intenta poblar el modelo La acción primero crea un objeto `EntryForm`. Luego intenta poblar el modelo
con los datos del `$_POST` que es proporcionado por Yii a través de [[yii\web\Request::post()]]. con los datos del `$_POST` que es proporcionado por Yii a través de [[yii\web\Request::post()]].
Si el modelo es llenado satisfactoriamente (p.e., el usuario ha enviado (submit) el formulario HTML), Si el modelo es llenado satisfactoriamente (ej., el usuario ha enviado el formulario HTML),
llamará [[yii\base\Model::validate()|validate()]] para asegurarse que los datos ingresados llamará a [[yii\base\Model::validate()|validate()]] para asegurarse que los datos ingresados
son válidos. son válidos.
Si todo está bien, la acción mostrará (render) una vista llamada `entry-confirm` para confirmar Si todo está bien, la acción mostrará una vista llamada `entry-confirm` para confirmar
con el usuario que acepta los datos que ha ingresado. De otra manera, la vista `entry` será con el usuario que acepta los datos que ha ingresado. De otra manera, la vista `entry` será
mostrada, y mostrará el formulario HTML junto con los mensajes de error de validación (si es que hay alguno). mostrada, y mostrará el formulario HTML junto con los mensajes de error de validación (si es que hay alguno).
> Info: La expresión `Yii::$app` representa la instancia de la [application](structure-applications.md) (aplicación) > Información: La expresión `Yii::$app` representa la instancia de la [aplicación](structure-applications.md)
que es un singleton globalmente accesible. También es un [service locator](concept-service-locator.md) (localizador de servicio) que es un singleton globalmente accesible. También es un [service locator](concept-service-locator.md) (localizador de servicio)
que provee los componentes, tales como `request`, `response`, `db`, etc. para soportar funcionalidades específicas. que provee los componentes, tales como `request`, `response`, `db`, etc. para soportar funcionalidades específicas.
En el código de arriba, el componente `request` es utilizado para acceder los datos `$_POST`. En el código de arriba, el componente `request` es utilizado para acceder los datos `$_POST`.
...@@ -160,10 +160,10 @@ y el segundo del dato "email". Después de los campos de input, el método [[yii ...@@ -160,10 +160,10 @@ y el segundo del dato "email". Después de los campos de input, el método [[yii
es llamado para general el botón de submit (enviar). es llamado para general el botón de submit (enviar).
Probando <a name="trying-it-out"></a> Intentándolo <a name="trying-it-out"></a>
-------- ------------
Para ver como funciona, utiliza tu navegador para ir al siguiente URL: Para ver cómo funciona, utiliza tu navegador para ir al siguiente URL:
``` ```
http://hostname/index.php?r=site/entry http://hostname/index.php?r=site/entry
...@@ -171,15 +171,14 @@ http://hostname/index.php?r=site/entry ...@@ -171,15 +171,14 @@ http://hostname/index.php?r=site/entry
Verás una página que muestra un formulario con dos campos de input. Adelante de cada campo de input, será mostrada también Verás una página que muestra un formulario con dos campos de input. Adelante de cada campo de input, será mostrada también
una etiqueta indicando que dato necesitas ingresar. Si haces click en el botón de submit sin ingresar nada, una etiqueta indicando que dato necesitas ingresar. Si haces click en el botón de submit sin ingresar nada,
o si ingresas una dirección de correo inválida, verás un mensaje de error que o si ingresas una dirección de correo inválida, verás un mensaje de error que se mostrará al lado del campo que tiene problemas.
se mostrará al lado del campo que tiene problemas.
![Form with Validation Errors](images/start-form-validation.png) ![Formulario con Errores de Validación](images/start-form-validation.png)
Después de ingresar un nombre y dirección de correo válidos y haciendo click en el botón de submit, verás una nueva página Después de ingresar un nombre y dirección de correo válidos y haciendo click en el botón de submit, verás una nueva página
mostrando los datos que acabas de ingresar. mostrando los datos que acabas de ingresar.
![Confirmation of Data Entry](images/start-entry-confirmation.png) ![Confirmación de los Datos de Entrada](images/start-entry-confirmation.png)
......
Diciendo Hola Diciendo Hola
============= =============
Esta sección describe cómo crear una nueva página "Hola" en tu aplicación. Esta sección describe cómo crear la típica página "Hola Mundo" (Hello World en inglés) en tu aplicación.
Para lograr este objetivo, vas a crear un [action](structure-controllers.md#creating-actions) (una acción) y Para lograr este objetivo, vas a crear una [acción](structure-controllers.md#creating-actions) y
un [view](structure-views.md) (una vista): una [vista](structure-views.md):
* La aplicación enviará la petición de la página a la acción * La aplicación enviará la petición de la página a la acción
* y la acción regresará el render de la vista que muestra la palabra "Hola" al usuario final. * y la acción regresará el render de la vista que muestra la palabra "Hola" al usuario final.
A lo largo de este tutorial, aprenderás tres cosas: A lo largo de este tutorial, aprenderás tres cosas:
1. Cómo crear un [action](structure-controllers.md) (acción) para responder peticiones (request), 1. Cómo crear una [acción](structure-controllers.md) para responder peticiones (request),
2. cómo crear un [view](structure-views.md) (vista) para armar el contenido de la respuesta, y 2. cómo crear una [vista](structure-views.md) para armar el contenido de la respuesta, y
3. cómo una aplicación responde una petición a [actions](structure-controllers.md#creating-actions). 3. cómo una aplicación envía peticiones a las [acciones](structure-controllers.md#creating-actions).
Creando una Acción <a name="creating-action"></a> Creando una Acción <a name="creating-action"></a>
------------------ ------------------
Para la tarea "Hola", crearás un [action](structure-controllers.md#creating-actions) `say` que lee Para la tarea "Hola", crearás una [acción](structure-controllers.md#creating-actions) `say` que lee
un parámetro `message` de la petición y muestra este mensaje de vuelta al usuario. Si la petición un parámetro `message` de la petición y muestra este mensaje de vuelta al usuario. Si la petición
no provee un parámetro `message`, la acción mostrará el mensaje por defecto "Hola". no provee un parámetro `message`, la acción mostrará el mensaje por defecto "Hola".
> Info: [Actions](structure-controllers.md#creating-actions) son objetos que los usuarios finales pueden utilizar directamente para > Información: Las [acciones](structure-controllers.md#creating-actions) son objetos que los usuarios finales pueden utilizar directamente para
su ejecución. Las Acciones están agrupadas por [controllers](structure-controllers.md) (controladores). El resultado de la ejecución de su ejecución. Las acciones están agrupadas por [controladores](structure-controllers.md) (controllers). El resultado de la ejecución de
una acción es la respuesta que el usuario final recibirá. una acción es la respuesta que el usuario final recibirá.
Las Acciones deben ser declaradas en [controllers](structure-controllers.md). Para simplificar, puedes Las acciones deben ser declaradas en [controladores](structure-controllers.md). Para simplificar, puedes
declarar la acción `say` en el `SiteController` existente. Este controlador está definido declarar la acción `say` en el controlador `SiteController` existente. Este controlador está definido
en el archivo de clase `controllers/SiteController.php`. Aquí está el inicio de la nueva acción: en el archivo de clase `controllers/SiteController.php`. Aquí está el inicio de la nueva acción:
```php ```php
...@@ -41,20 +41,20 @@ class SiteController extends Controller ...@@ -41,20 +41,20 @@ class SiteController extends Controller
{ {
// ...código existente... // ...código existente...
public function actionDice($message = 'Hola') public function actionSay($message = 'Hola')
{ {
return $this->render('say', ['message' => $message]); return $this->render('say', ['message' => $message]);
} }
} }
``` ```
En el código de arriba, la acción `say` está definida por un método llamado `actionDice` en la clase `SiteController`. En el código de arriba, la acción `say` está definida por un método llamado `actionSay` en la clase `SiteController`.
Yii utiliza el prefijo `action` para diferenciar los métodos de acciones de otros métodos en las clases de los controladores. Yii utiliza el prefijo `action` para diferenciar los métodos de acciones de otros métodos en las clases de los controladores.
El nombre que le sigue al prefijo `action` se mapea al ID de la acción. El nombre que le sigue al prefijo `action` se mapea al ID de la acción.
Cuando se trata de nombrar las acciones, debes entender como Yii trata los ID de las acciones. Los ID de las acciones siempre son Cuando se trata de nombrar las acciones, debes entender como Yii trata los ID de las acciones. Los ID de las acciones siempre son
referenciados en minúscula. Si un ID de acción requiere múltiples palabras, estas serán concatenadas con guiones referenciados en minúscula. Si un ID de acción requiere múltiples palabras, estas serán concatenadas con guiones
(p.e., `crear-comentario`). Los nombres de los métodos de las acciones son mapeados a los ID de las acciones (ej., `crear-comentario`). Los nombres de los métodos de las acciones son mapeados a los ID de las acciones
removiendo los guiones, colocando en mayúscula la primera letra de cada palabra, y colocando el prefijo `action` al resultado. Por ejemplo, removiendo los guiones, colocando en mayúscula la primera letra de cada palabra, y colocando el prefijo `action` al resultado. Por ejemplo,
el ID de la acción `crear-comentario` corresponde al nombre de método de acción `actionCrearComentario`. el ID de la acción `crear-comentario` corresponde al nombre de método de acción `actionCrearComentario`.
...@@ -65,15 +65,15 @@ el parámetro con el parámetro que tenga el mismo nombre en la petición. En ot ...@@ -65,15 +65,15 @@ el parámetro con el parámetro que tenga el mismo nombre en la petición. En ot
parámetro `message` con el valor de `"Adios"`, la variable `$message` dentro de la acción será sustituida por este valor. parámetro `message` con el valor de `"Adios"`, la variable `$message` dentro de la acción será sustituida por este valor.
Dentro del método de acción, [[yii\web\Controller::render()|render()]] es llamado para hacer render (mostrar o visualizar) un Dentro del método de acción, [[yii\web\Controller::render()|render()]] es llamado para hacer render (mostrar o visualizar) un
archivo [view](structure-views.md) llamado `say`. El parámetro `message` tambien es pasado al view para que pueda ser utilizado ahí. archivo [vista](structure-views.md) (template) llamado `say`. El parámetro `message` tambien es pasado al view para que pueda ser utilizado ahí.
El resultado es regresado al método action. Ese resultado será recibido por la aplicación y mostrado al usuario final en el El resultado es regresado al método de la acción. Ese resultado será recibido por la aplicación y mostrado al usuario final en el
navegador (como parte de una página HTML completa). navegador (como parte de una página HTML completa).
Creando una Vista <a name="creating-view"></a> Creando una Vista <a name="creating-view"></a>
----------------- -----------------
[Views](structure-views.md) (vistas) son scripts que escribes para generar una respuesta de contenido. Las [vistas](structure-views.md) son scripts que escribes para generar una respuesta de contenido.
Para la tarea "Hola", vas a crear una vista `say` que imprime el parámetro `message` recibido desde el método action, y pasado por la acción a la vista: Para la tarea "Hola", vas a crear una vista `say` que imprime el parámetro `message` recibido desde el método action, y pasado por la acción a la vista:
```php ```php
...@@ -83,52 +83,56 @@ use yii\helpers\Html; ...@@ -83,52 +83,56 @@ use yii\helpers\Html;
<?= Html::encode($message) ?> <?= Html::encode($message) ?>
``` ```
El view `say` debe ser guardado en el archivo `views/site/dice.php`. Cuando el método [[yii\web\Controller::render()|render()]] La vista `say` debe ser guardado en el archivo `views/site/say.php`. Cuando el método [[yii\web\Controller::render()|render()]]
es llamado en una acción, buscará un archivo PHP llamado `views/ControllerID/NombreView.php`. es llamado en una acción, buscará un archivo PHP llamado `views/ControllerID/NombreVista.php`.
Nota que en el código de arriba, el parámetro `message` es [[yii\helpers\Html::encode()|HTML-encoded]] Nota que en el código de arriba, el parámetro `message` es procesado por [[yii\helpers\Html::encode()|HTML-encoded]]
antes de ser impreso. Esto es necesario ya que el parámetro viene de un usuario final, haciéndolo vulnerable a antes de ser impreso. Esto es necesario ya que el parámetro viene de un usuario final, haciéndolo vulnerable a
[ataques cross-site scripting (XSS)](http://es.wikipedia.org/wiki/Cross-site_scripting) pudiendo inyectar código de Javascript malicioso dentro del parámetro. [ataques cross-site scripting (XSS)](http://es.wikipedia.org/wiki/Cross-site_scripting) pudiendo inyectar código de Javascript malicioso dentro del parámetro.
Naturalmente, puedes colocar mas contenido en el view `say`. El contenido puede consistir de etiquetas HTML, texto plano, e inlcusive código PHP. Naturalmente, puedes colocar mas contenido en la vista `say`. El contenido puede consistir de etiquetas HTML, texto plano, e inlcusive código PHP.
De hecho, el view `say` es sólo un script PHP que es ejecutado por el método [[yii\web\Controller::render()|render()]]. De hecho, la vista `say` es sólo un script PHP que es ejecutado por el método [[yii\web\Controller::render()|render()]].
El contenido impreso por el script view será regresado a la aplicación como la respuesta del resultado. La aplicación a cambio mostrará el resultado al usuario final. El contenido impreso por el script de la vista será regresado a la aplicación como la respuesta del resultado. La aplicación a cambio mostrará el resultado al usuario final.
Probando <a name="trying-it-out"></a> Intentándolo <a name="trying-it-out"></a>
-------- ------------
Después de crear la acción y la vista, puedes abrir la nueva página abriendo el siguiente URL: Después de crear la acción y la vista, puedes acceder a la nueva página abriendo el siguiente URL:
``` ```
http://hostname/index.php?r=site/dice&mensaje=Hello+World http://hostname/index.php?r=site/say&mensaje=Hello+World
``` ```
![Hello World](images/start-hello-world.png) ![Hello World](images/start-hello-world.png)
Esta URL resultará en una página mostrando "Hello World". La página comparte el mismo encabezado y pie de página de las otras páginas de la aplicación. Esta URL resultará en una página mostrando "Hello World". La página comparte el mismo encabezado y pie de página de las otras páginas de la aplicación.
Si omites el parámetro `message` en el URL, verás que la página muestra sólo "Hola". Esto es porque `message` es pasado como un parámetro al método `actionDice()`, y cuando es omitido, el valor por defecto `"Hola"` será utilizado. Si omites el parámetro `message` en el URL, verás que la página muestra sólo "Hola". Esto es porque `message` es pasado como un parámetro al método `actionSay()`,
y cuando es omitido, el valor por defecto `"Hola"` será utilizado.
> Info: La nueva página comparte el mismo encabezado y pie de página que otras páginas porque el método [[yii\web\Controller::render()|render()]] > Información: La nueva página comparte el mismo encabezado y pie de página que otras páginas porque el método [[yii\web\Controller::render()|render()]]
automáticamente inyectará el resultado del view `say` en la plantilla [layout](structure-views.md#layouts) que en este automáticamente inyectará el resultado de la vista `say` en el [layout](structure-views.md#layouts), que en este
caso está localizada en `views/layouts/main.php`. caso está localizada en `views/layouts/main.php`.
El parámetro `r` en el URL de arriba requiere más explicación. Significa [route](runtime-routing.md) (ruta), y es el ID amplio y único de una aplicación El parámetro `r` en el URL de arriba requiere más explicación. Se refierea a [route](runtime-routing.md) (ruta), y es el ID amplio y único de una aplicación
que refiere a una acción. El formato de las rutas es `ControllerID/ActionID`. Cuando la aplicación recibe una petición, revisará este parámetro, utilizando la parte del `ControllerID` para determinar cual clase de controlador será inicializado para manejar la petición. Entonces, el controlador utilizará la parte `ActionID` para determinar cual acción debe ser inizializada para hacer realmente el trabajo. En este ejemplo, la ruta `site/dice` que refiere a una acción. El formato de las rutas es `ControllerID/ActionID`. Cuando la aplicación recibe una petición, revisará este parámetro,
será respondida por la clase controlador `SiteController` y la acción `say`. Como resultado, utilizando la parte del `ControllerID` para determinar cual clase de controlador será inicializado para manejar la petición. Entonces, el controlador utilizará
el método `SiteController::actionDice()` será llamado para manejar el requerimiento. la parte `ActionID` para determinar cual acción debe ser inizializada para hacer realmente el trabajo.
En este ejemplo, la ruta `site/say` será respondida por la clase controlador `SiteController` y la acción `say`. Como resultado,
el método `SiteController::actionSay()` será llamado para manejar el requerimiento.
> Info: Al igual que las acciones, los controladores tambien tienen ID únicos que los identifican en una aplicación. > Información: Al igual que las acciones, los controladores tambien tienen ID únicos que los identifican en una aplicación.
Los ID de los Controladores utilizan las mismas reglas de nombrado que los ID de las acciones. Los nombres de las clases de los Controladores son derivados de los ID de los controladores removiendo los guiones de los ID, colocando la primera letra en mayúscula en cada palabra, y colocando el sufijo `Controller` al resultado. Por ejemplo, el ID del controlador `post-comentarios` corresponde Los ID de los Controladores utilizan las mismas reglas de nombrado que los ID de las acciones. Los nombres de las clases de los controladores son derivados de los ID de los controladores removiendo los guiones de los ID, colocando la primera letra en mayúscula en cada palabra, y colocando el sufijo `Controller` al resultado. Por ejemplo, el ID del controlador `post-comentario` corresponde
al nombre de clase de controlador `PostComentarioController`. al nombre de clase del controlador `PostComentarioController`.
Resumen <a name="summary"></a> Resumen <a name="summary"></a>
------- -------
En esta sección, has tocado las partes del controlador y la vista del patrón de diseño MVC. En esta sección, has tocado las partes del controlador y la vista del patrón de diseño MVC.
Has creado una acción como parte de un controlador para manejar una petición específica. Y también has creado una vista para armar el contenido de la respuesta. En este simple ejemplo, ningún modelo ha sido involucrado ya que el único dato que fue utilizado fue el parámetro `message`. Has creado una acción como parte de un controlador para manejar una petición específica. Y también has creado una vista para armar el contenido de la respuesta.
En este simple ejemplo, ningún modelo ha sido involucrado ya que el único dato que fue utilizado fue el parámetro `message`.
También has aprendido acerca de las rutas en Yii, que actúan como puentes entre la petición del usuario y las acciones del controlador. También has aprendido acerca de las rutas en Yii, que actúan como puentes entre la petición del usuario y las acciones del controlador.
......
Mirando Hacia Adelante
======================
A esta altura, as creado una aplicación completa en Yii, y has aprendido cómo implementar algunas típicas
características necesarias, como obtener datos de los usuarios a través de un formulario HTML, traer datos de la base de datos
y mostrarlos en forma paginada. También has aprendido como utilizar la herramienta [Gii](tool-gii.md) para generar
código automáticamente, lo que transforma el hecho de programar en una tarea tan simple como completar algunos formularios.
En esta sección, resumiremos los recursos acerca de Yii que ayudan a ser más productivos al utilizar el framework.
* Documentación
- La Guía Definitiva:
Como el nombre lo indica, la guía precisamente define cómo Yii debería trabajar y te da una guía general
acerca de usar el framework. Este es el tutorial simple más importante de Yii que deberías leer
antes de escribir algún código.
- La Referencia de Clases:
Este especifica el uso de cada clase provista por Yii. Debería ser utilizado mayormente cuando estés escribiendo
código y quieras entender el funcionamiento de alguna clase, método o propiedad en particular.
- Artículos de la Wiki:
Estos artículos son escritos por usuarios de Yii basado en experiencias propias. En su mayoría son escritos
como recetas que muestran cómo resolver problemas particulares en Yii. Aunque la calidad de estos artículos
puede ser tan buena como la Guía Definitiva, son particularmente útiles al cubrir aspectos más amplios
y puede a menudo ofrecer soluciones listas para usar.
- Libros
* [Extensiones](http://www.yiiframework.com/extensions/):
Yii cuenta con una librería de cientos de extensiones provistas por la comunidad de usuarios que pueden ser fácilmente integradas
en tu aplicación y lograr que escribirla sea más simple y rápido.
* Comunidad
- [Foro](http://www.yiiframework.com/forum/)
- [GitHub](https://github.com/yiisoft/yii2)
- [Facebook](https://www.facebook.com/groups/yiitalk/)
- [Twitter](https://twitter.com/yiiframework)
- [LinkedIn](https://www.linkedin.com/groups/yii-framework-1483367)
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