Debido a los problemas explicados en la sección anterior, debemos añadir una columna llamada slug
en la tabla category
:
# config/schema.yml
propel:
jobeet_category:
id: ~
name: { type: varchar(255), required: true }
slug: { type: varchar(255), required: true, index: unique }
Ahora que slug
es una columna auténtica de la tabla, puedes eliminar el método getSlug()
de la clase JobeetCategory
.
Cada vez que se modifica el nombre de una categoría, es necesario calcular el nuevo valor de su slug
y guardarlo en la base de datos. Para ello, puedes redefinir el método setName()
:
// lib/model/JobeetCategory.php
public function setName($name)
{
parent::setName($name);
$this->setSlug(Jobeet::slugify($name));
}
Ejecuta la tarea propel:build-all-load
para volver a generar todas las tablas de la base de datos y para cargar los datos de prueba de los archivos de datos:
$ php symfony propel:build-all-load --no-confirmation
Ahora ya tenemos todo listo para crear el nuevo método executeShow()
. Reemplaza el contenido del archivo de acciones del módulo category
por el siguiente código:
// apps/frontend/modules/category/actions/actions.class.php
class categoryActions extends sfActions
{
public function executeShow(sfWebRequest $request)
{
$this->category = $this->getRoute()->getObject();
}
}
Nota Como hemos eliminado el método executeIndex()
generado automáticamente, también puedes borrar la plantilla indexSuccess.php
asociada, que se encuentra en el archivo apps/frontend/modules/category/templates/indexSuccess.php
.
Por último, crea la plantilla showSuccess.php
:
// apps/frontend/modules/category/templates/showSuccess.php
<?php use_stylesheet('jobs.css') ?>
<?php slot('title', sprintf('Jobs in the %s category', $category->getName())) ?>
<div class="category">
<div class="feed">
<a href="">Feed</a>
</div>
<h1><?php echo $category ?></h1>
</div>
<table class="jobs">
<?php foreach ($category->getActiveJobs() as $i => $job): ?>
<tr class="<?php echo fmod($i, 2) ? 'even' : 'odd' ?>">
<td class="location">
<?php echo $job->getLocation() ?>
</td>
<td class="position">
<?php echo link_to($job->getPosition(), 'job_show_user', $job) ?>
</td>
<td class="company">
<?php echo $job->getCompany() ?>
</td>
</tr>
<?php endforeach; ?>
</table>