为了不显示我的社交网络中的URL成员的ID的问题,我创造了这个路线:的Symfony:关于路由和敲击
perfil_miembro:
url: /miembros/:nombre_apellidos
class: sfDoctrineRoute
options: { model: Usuario, type: object}
param: { module: miembros, action: show}
并补充在表演动作这一行:
$this->usuario = $this->getRoute()->getObject();
它的工作原理确定:当我点击他们的名字对应的轮廓显示和URL是这样的类型:
frontend_dev.p HP/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/maria-de-miguel-alvarado
但它总是显示我在夹具文件中的第一个成员的配置文件。
我该如何让它工作?
Ubuntu 8.04 - Symfony 1.3。
+1建议'uniquify'的网址,以避免冲突,虽然我认为一些散列的id和盐会更好 - 避免暴露id到网站。 Doctrine是否真的构建了这样的查询,并返回数据库中的第一行?如果这是真的,那很令人担忧。 – Raise 2010-07-13 22:43:01
@提高散列是一个好主意。关于查询建立,我是推动用户,但根据症状,这是我能想象的唯一方式。我同意计数可能是为了查看记录与查询的匹配程度,但这不是必须的。 – Maerlyn 2010-07-14 08:09:53
谢谢Maerlyn,你写过“我会在URL中包含ID”,但这不是一个好习惯,你可以在这里看到(搜索永久链接)http://www.symfony-project.org/gentle-introduction/1_4/en/09-Links-and-the-Routing-System – ziiweb 2010-07-14 09:33:54