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文件中?
或者,也许您可以给我一个链接以了解解决方案。
编辑我使用 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}\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n\n然后我向我的新闻实体添加一个 slug 属性:
\n\nprivate $slug;\nRun 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\ndoctrine:generate:entites myBundle:News\nRun 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 ]);`\nRun Code Online (Sandbox Code Playgroud)\n\n在我的 Twig 模板中,我创建了类似显示一则新闻的链接:
\n\n<a href="{{ path(\'myroute_show_one_by_id\', {\'slug\': news.slug}) }}">{{news.title}}</a>\nRun Code Online (Sandbox Code Playgroud)\n\n我希望这可以帮助别人
\n| 归档时间: |
|
| 查看次数: |
2332 次 |
| 最近记录: |