Ver índice de contenidos del libro

4.7. La acción de la página de una oferta de trabajo

La página que muestra el detalle de cada oferta de trabajo se genera en la acción show, definida en el método executeShow() del módulo job:

class jobActions extends sfActions
{
  public function executeShow(sfWebRequest $request)
  {
    $this->job = JobeetJobPeer::retrieveByPk($request->getParameter('id'));
    $this->forward404Unless($this->job);
  }
 
  // ...
}

Al igual que sucedía en la acción index, se emplea la clase JobeetJobPeer para obtener los datos de una oferta de trabajo. La principal diferencia es que en esta ocasión se emplea el método retrieveByPk(). El parámetro que se debe pasar a este método es el identificador único de la oferta, es decir, su clave primaria. En la siguiente sección se explica por qué la sentencia $request->getParameter('id') devuelve la clave primaria de la oferta de trabajo.

Nota Las clases del modelo generadas automáticamente contienen muchos métodos útiles para interactuar con los objetos del proyecto. Te recomendamos que dediques un tiempo a investigar el código que se encuentra en el directorio lib/om/ para descubrir todas las utilidades de estas clases.

Cuando la oferta de trabajo solicitada no existe en la base de datos, se redirige al usuario a una página de tipo 404 gracias al método forward404Unless(). El primer argumento del método es un valor booleano. Si este valor no es true, se detiene la ejecución de la acción actual. No es necesario devolver ningún valor porque se lanza una excepción de tipo sfError404Exception.

En cuanto a las excepciones, la página que se muestra es diferente en función de si la aplicación se ejecuta en el entorno de producción o en el de desarrollo:

Error 404 en el entorno de desarrollo

Figura 4.8 Error 404 en el entorno de desarrollo

Error 404 en el entorno de producción

Figura 4.9 Error 404 en el entorno de producción

Nota Antes de que subas el sitio web de Jobeet al servidor de producción, vamos a explicar cómo personalizar la página del error 404.