Symfony:在我的文章URL中生成条形URL,而不是新闻ID

zm4*_*455 5 routing doctrine slug symfony

我想要一个这样的网址:

www.mysite.com/my-super-blog-post
Run Code Online (Sandbox Code Playgroud)

代替这个:

www.mysite.com/7
Run Code Online (Sandbox Code Playgroud)

其中“ 7”是我的News对象的id属性。

当我在Symfony文档中看到时,我认为我需要使用以下代码行:

$this->generateUrl('blog_show', array('slug' => 'my-blog-post'), UrlGeneratorInterface::ABSOLUTE_URL);
Run Code Online (Sandbox Code Playgroud)

这样对吗 ?我不明白的是,我需要在哪里使用那行代码?在我的NewsController.php文件中?

或者,也许您可​​以给我一个链接以了解解决方案。

zm4*_*455 5

编辑我使用 Symfony 3.2

\n\n

好吧,我自己找到了解决方案。这就是我所做的。

\n\n

首先从 symfony 文档中阅读此内容。使用 ConvertParamater 实现起来非常简单http://symfony.com/doc/current/best_practices/controllers.html#using-the-paramconverter

\n\n

实施后:

\n\n

安装 StofDoctrineExtensionBundle

\n\n

在composer.json中

\n\n

"require": {\n "stof/doctrine-extensions-bundle": "~1.1"\n}

\n\n

不要忘记更新 appKernel.php 文件

\n\n
<?php\n// app/AppKernel.php\n\npublic function registerBundles()\n{\n  return array(\n    // \xe2\x80\xa6\n    new Stof\\DoctrineExtensionsBundle\\StofDoctrineExtensionsBundle(),\n    // \xe2\x80\xa6\n  );\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我配置 config.yml 文件:

\n\n
# app/config/config.yml\n\n# Stof\\DoctrineExtensionsBundle configuration\nstof_doctrine_extensions:\n    orm:\n        default:\n            sluggable: true\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我向我的新闻实体添加一个 slug 属性:

\n\n
private $slug;\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我更新我的 News.orm.yml 文件\n slug:\n 类型: string\n 长度: 255\n 唯一: false\n gedmo:\n slug:\n 分隔符: _\n 样式: 骆驼\n 字段:\n - 标题

\n\n

那我就做

\n\n
doctrine:generate:entites myBundle:News\n
Run Code Online (Sandbox Code Playgroud)\n\n

还有 `doctrine:schema:update --force

\n\n

这在我的新闻表中创建了一个 slug 字段。因为该字段可能不为空,所以我手动输入了一些值,因此新闻表的每一行都有一个有效的 slug

\n\n

然后在我的 NewsController 中我使用这行代码:

\n\n
$this->generateUrl(\'myroute_news_show_one_by_id\', array(\'slug\' => $news->getSlug()), UrlGeneratorInterface::ABSOLUTE_URL);\n\n        return $this->render(\'MyBundle:News:single_post.html.twig\', [\n                    \'news\' => $news,\n                    \'tags\' => $arrTagNames\n        ]);`\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我的 Twig 模板中,我创建了类似显示一则新闻的链接:

\n\n
<a href="{{ path(\'myroute_show_one_by_id\', {\'slug\': news.slug}) }}">{{news.title}}</a>\n
Run Code Online (Sandbox Code Playgroud)\n\n

我希望这可以帮助别人

\n