From e2bab0c1f3137ae7eecb82296043e8bf7a5b3f6c Mon Sep 17 00:00:00 2001 From: Olivers De Abreu Date: Fri, 13 Jun 2014 14:55:36 -0400 Subject: [PATCH 1/3] Spanish start-hello.md guide --- docs/guide-es/start-hello.md | 135 +++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 docs/guide-es/start-hello.md diff --git a/docs/guide-es/start-hello.md b/docs/guide-es/start-hello.md new file mode 100644 index 0000000000..7ffb4d5bb8 --- /dev/null +++ b/docs/guide-es/start-hello.md @@ -0,0 +1,135 @@ +Diciendo Hola +============ + +Esta sección describe cómo crear una nueva página "Hola" en tu aplicación. +Para lograr este objetivo, vas a crear un [action](structure-controllers.md#creating-actions) (una acción) y +un [view](structure-views.md) (una vista): + +* 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. + +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), +2. cómo crear un [view](structure-views.md) (vista) 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). + + +Creando una Acción +------------------ + +Para la tarea "Hola", crearás un [action](structure-controllers.md#creating-actions) `dice` que lee +un parámetro `mensaje` de la petición y muestra este mensaje de vuelta al usuario. Si la petición +no provee un parámetro `mensaje`, 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 + su ejecución. Las Acciones están agrupadas por [controllers](structure-controllers.md) (controladores). El resultado de la ejecución de + una acción es la respuesta que el usuario final recibirá. + +Las Acciones deben ser declaradas en [controllers](structure-controllers.md). Para simplificar, puedes +declarar la acción `dice` en el `SiteController` existente. Este controlador está definido +en el archivo de clase `controllers/SiteController.php`. Aquí está el inicio de la nueva acción: + +```php +render('dice', ['mensaje' => $mensaje]); + } +} +``` + +En el código de arriba, la acción `dice` está definida por un método llamado `actionDice` 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. +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 +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 +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 método de acción en nuestro ejemplo toma un parámetro `$mensaje`, el cual tiene como valor por defecto `"Hola"` (de la misma manera +que se coloca un valor por defecto a un argumento en cualquier función o método en PHP). Cuando una aplicación +recibe una petición y determina que la acción `dice` es responsable de manejar dicha petición, la aplicación llenará +el parámetro con el parámetro que tenga el mismo nombre en la petición. En otras palabras, si la petición incluye un +parámetro `mensaje` con el valor de `"Adios"`, la variable `$mensaje` 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 +archivo [view](structure-views.md) llamado `dice`. El parámetro `mensaje` 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 +navegador (como parte de una página HTML completa). + + +Creando una Vista +----------------- + +[Views](structure-views.md) (vistas) son scripts que escribes para generar una respuesta de contenido. +Para la tarea "Hola", vas a crear una vista `dice` que imprime el parámetro `mensaje` recibido desde el método action, y pasado por la acción a la vista: + +```php + + +``` + +El view `dice` debe ser guardado en el archivo `views/site/dice.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`. + +Nota que en el código de arriba, el parámetro `mensaje` es [[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 +[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 `dice`. El contenido puede consistir de etiquetas HTML, texto plano, e inlcusive código PHP. +De hecho, el view `dice` 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. + + +Probándo +-------- + +Después de crear la acción y la vista, puedes abrir la nueva página abriendo el siguiente URL: + +``` +http://hostname/index.php?r=site/dice&mensaje=Hello+World +``` + +![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. + +Si omites el parámetro `mensaje` en el URL, verás que la página muestra sólo "Hola". Esto es porque `mensaje` es pasado como un parámetro al método `actionDice()`, 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()]] + automáticamente inyectará el resultado del view `dice` en la plantilla [layout](structure-views.md#layouts) que en este + 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 +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` +será respondida por la clase controlador `SiteController` y la acción `dice`. Como resultado, +el método `SiteController::actionDice()` 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. + 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 + al nombre de clase de controlador `PostComentarioController`. + + +Resumen +------- + +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 `mensaje`. + +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. + +En la próxima sección, aprenderás como crear un modelo, y agregar una nueva página que contenga un formulario HTML. From fb506018fd996b237185ab56909bf5b197150c19 Mon Sep 17 00:00:00 2001 From: Olivers De Abreu Date: Fri, 13 Jun 2014 14:59:33 -0400 Subject: [PATCH 2/3] Typo fix --- docs/guide-es/start-hello.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guide-es/start-hello.md b/docs/guide-es/start-hello.md index 7ffb4d5bb8..873d0dbebf 100644 --- a/docs/guide-es/start-hello.md +++ b/docs/guide-es/start-hello.md @@ -95,7 +95,7 @@ De hecho, el view `dice` es sólo un script PHP que es ejecutado por el método 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. -Probándo +Probando -------- Después de crear la acción y la vista, puedes abrir la nueva página abriendo el siguiente URL: From bbb829845eea9d90090f7ab9ce5de485b8ab9826 Mon Sep 17 00:00:00 2001 From: Olivers De Abreu Date: Fri, 13 Jun 2014 15:53:34 -0400 Subject: [PATCH 3/3] Copy image start-hello-world.png to folder guide-es/images --- docs/guide-es/images/start-hello-world.png | Bin 0 -> 32874 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/guide-es/images/start-hello-world.png diff --git a/docs/guide-es/images/start-hello-world.png b/docs/guide-es/images/start-hello-world.png new file mode 100644 index 0000000000000000000000000000000000000000..30d1acad389e1aebc46dc912d725d822b2f60cb1 GIT binary patch literal 32874 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

X}ax;YWtniFf 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