Ver índice de contenidos del libro

3.6. Probando la aplicación en el navegador

Hasta el momento hemos utilizado mucho la línea de comandos, pero eso no es nada emocionante, sobre todo para un proyecto web. No obstante, gracias a la línea de comandos ya tenemos todo lo que necesitamos para crear páginas web que interactúen con la base de datos.

A continuación se va a crear un listado de las ofertas de trabajo, se va a modificar una oferta existente y se va a borrar otra oferta de trabajo. Como se explicó en la lección del primer día, los proyectos Symfony se componen de aplicaciones. A su vez, cada aplicación está dividida en módulos. Un módulo es un conjunto autosuficiente de código PHP que representa una característica de la aplicación (como por ejemplo, el módulo de la API) o un conjunto de operaciones que el usuario puede realizar sobre un objeto del modelo (como por ejemplo el módulo de las ofertas de trabajo).

Symfony es capaz de generar automáticamente un módulo que permite realizar las operaciones básicas sobre los datos de un objeto del modelo:

$ php symfony propel:generate-module --with-show --non-verbose-templates frontend job JobeetJob

La tarea propel:generate-module anterior genera un módulo llamado job en la aplicación frontend y basado en el modelo JobeetJob. Después de ejecutar la tarea propel:generate-module, se han creado varios archivos y directorios dentro del directorio apps/frontend/modules/job/:

Directorio Descripción
actions/ Las acciones del módulo
templates/ Las plantillas del módulo

El archivo actions/actions.class.php define todas las acciones disponibles en el módulo job:

Nombre de la acción Descripción
index Muestra un listado con los registros de la base de datos
show Muestra los campos y valores de un registro específico
new Muestra un formulario para insertar un nuevo registro en la base de datos
create Inserta un nuevo registro en la base de datos
edit Muestra un formulario para modificar un registro existente en la base de datos
update Actualiza los datos de un registro a partir de la información enviada por el usuario
delete Elimina un registro de la base de datos

Ahora ya puedes probar el módulo job accediendo a la siguiente URL en tu navegador:

http://jobeet.localhost/frontend_dev.php/job
Módulo job

Figura 3.2 Módulo job

Si intentas modificar los datos de una oferta de trabajo, verás que Symfony muestra una excepción, ya que no se ha indicado cuál es la representación en forma de texto de los objetos de tipo categoría. La representación textual de un objeto PHP se establece con el método mágico __toString(). Añade el siguiente código en la clase JobeetCategory del modelo para establecer su representación textual:

// lib/model/JobeetCategory.php
class JobeetCategory extends BaseJobeetCategory
{
  public function __toString()
  {
    return $this->getName();
  }
}

Ahora, cuando Symfony necesite mostrar la representación en forma de texto de una categoría, se invoca el método __toString(), que devuelve directamente el nombre de la categoría. Como seguramente vamos a necesitar la representación textual de todas las clases del modelo, es una buena idea definir ahora el método __toString() en el resto de las clases del modelo:

// lib/model/JobeetJob.php
class JobeetJob extends BaseJobeetJob
{
  public function __toString()
  {
    return sprintf('%s at %s (%s)', $this->getPosition(), $this->getCompany(), $this->getLocation());
  }
}
// lib/model/JobeetAffiliate.php
class JobeetAffiliate extends BaseJobeetAffiliate
{
  public function __toString()
  {
    return $this->getUrl();
  }
}

Ahora ya puedes modificar cualquier dato de las ofertas de trabajo. Prueba a dejar un campo en blanco o intenta introducir una fecha incorrecta. En efecto, Symfony ha generado automáticamente unas reglas de validación básicas a partir de la información del esquema de datos.

Validación de datos

Figura 3.3 Validación de datos