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
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.