El sitio web del usuario generalmente trabaja con el formulario en el siguiente orden:
Primero, cuando la acción del controlador se ejecuta se imprime la página web que contiene el formulario que el usuario del sitio debe llenar. Una vez que los usuarios llenan los campos del formulario y hacen clic en el botón Submit se genera la petición HTTP y se envían los datos al servidor.
Segundo, desde el método de acción del controlador podemos extraer los datos enviados a través de las variables POST (y/o GET) y mostrar la página con los resultados del procesamiento de los datos.
Generalmente estas dos páginas web se generan en la misma acción del controlador.
En el siguiente ejemplo mostraremos como podemos crear una acción en el controlador para mostrar el formulario de contacto y recuperar los datos enviados por el usuario. Para comenzar agregamos la plantilla de vista contact-us.phtml dentro de la carpeta application/index que esta dentro de la carpeta /view del módulo (ver figura 7.6 para un ejemplo).
Colocamos el código HTML del formulario de contacto que usamos en la sección anterior dentro del archivo de plantilla de vista.
Luego, agregamos el método de acción contactUsAction()
a la clase
IndexController
. Con el método de acción queremos extraer los datos crudos
del formulario de contacto que fue enviado por el usuario del sitio:
<?php
namespace Application\Controller;
// ...
class IndexController extends AbstractActionController
{
// This action displays the feedback form
public function contactUsAction()
{
// Check if user has submitted the form
if($this->getRequest()->isPost()) {
// Retrieve form data from POST variables
$data = $this->params()->fromPost();
// ... Do something with the data ...
var_dump($data);
}
// Pass form variable to view
return new ViewModel([
'form' => $form
]);
}
}
En el código de arriba definimos el método de acción contactUsAction()
dentro de la clase IndexController
(línea 9).
Luego en las línea 12 revisamos si la solicitud es una petición POST (revisando la primera línea de la petición HTTP). Generalmente, el formulario usa el método POST para enviar los datos. Por esta razón podemos detectar si el formulario se envío o no revisando la primera línea de la petición HTTP.
En la línea 15 recuperamos los datos crudos enviados por el usuario. Extraemos
todas las variables POST con la ayuda del complemento para controladores Params
.
Los datos se regresan en forma de un arreglo y se guardan dentro de la variable
$data
.
Finalmente debemos agregar una ruta de tipo literal para hacer una URL corta
y fácil de recordar para la página Contactanos. Agregamos la siguiente llave
contactus
a la configuración de rutas en el archivo module.config.php:
<?php
return [
// ...
'router' => [
'routes' => [
// Add the following routing rule for the "Contact Us" page
'contactus' => [
'type' => Literal::class,
'options' => [
'route' => '/contactus',
'defaults' => [
'controller' => Controller\IndexController::class,
'action' => 'contactUs',
],
],
],
],
],
],
// ...
];
Ahora si escribimos la URL "http://localhost/contactus" en la barra de navegación del navegador web deberíamos ver una página como la que se muestra en la figura 7.7.
Ingresamos el correo electrónico, el asunto y el cuerpo de texto y hacemos
clic en el botón Submit del formulario. Los datos serán enviados al
servidor y finalmente extraídos en el método IndexController::contactUsAction()
.
Abajo se muestra una ejemplo del arreglo $data
(producido con la función
PHP var_dump()
). Como podemos ver el arreglo contiene una llave para cada
campo incluyendo el campo "submit".
array (size=4)
'email' => string 'name@example.com' (length=16)
'subject' => string 'Happy New Year!' (length=15)
'body' => string 'Dear Support, I'd like to thank you for the
excellent quality of your support service and wish you
a Happy New Year!' (length=118)
'submit' => string 'Submit' (length=6)