Чтобы не отображать идентификаторы участников моей социальной сети в URL-адресе, я создал этот маршрут:
perfil_miembro:
url: /miembros/:nombre_apellidos
class: sfDoctrineRoute
options: { model: Usuario, type: object}
param: { module: miembros, action: show}
И добавил эту строку в действие show:
$this->usuario = $this->getRoute()->getObject();
Это работает нормально: когда я нажимаю на их имена, отображается соответствующий профиль, а URL-адрес имеет следующий тип:
frontend_dev.php/miembros/Мария+де+Мигель+Альварадо
Теперь я хотел бы указать имена в URL-адресе, поэтому я изменил маршрут следующим образом:
perfil_miembro:
url: /miembros/:nombre_apellidos_slug
class: sfDoctrineRoute
options: { model: Usuario, type: object}
param: { module: miembros, action: show}
И я создал эти методы:
public function getNombreApellidosSlug()
{
return Tirengarfio::slugify($this->getNombreApellidos());
}
class Tirengarfio
{
static public function slugify($text)
{
// replace all non letters or digits by -
$text = preg_replace('/\W+/', '-', $text);
// trim and lowercase
$text = strtolower(trim($text, '-'));
return $text;
}
}
Теперь, когда я нажимаю на имя участника, отображается этот URL:
frontend_dev.php/miembros/мария-де-мигель-альварадо
Но он всегда показывает профиль первого члена, который у меня есть в файле приспособлений.
Как заставить его работать?
Ubuntu 8.04 — Symfony 1.3.