【问题标题】:Symfony: generating slug url in my article url instead of news idSymfony:在我的文章 url 中生成 slug url 而不是新闻 id
【发布时间】:2017-01-12 01:12:56
【问题描述】:

我想要一个这样的网址:

www.mysite.com/my-super-blog-post

而不是这个:

www.mysite.com/7

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

当我看到 Symfony 文档时,我认为我需要使用这行代码:

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

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

或者你可以给我一个链接来阅读解决方案。

【问题讨论】:

    标签: routing doctrine symfony slug


    【解决方案1】:

    编辑我使用 Symfony 3.2

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

    首先从 symfony 文档中阅读此内容。使用 ConvertParamater 真的很容易实现http://symfony.com/doc/current/best_practices/controllers.html#using-the-paramconverter

    实施后:

    安装 StofDoctrineExtensionBundle

    在 composer.json 中

    “要求”:{ “stof/doctrine-extensions-bundle”:“~1.1” }

    别忘了更新 appKernel.php 文件

    <?php
    // app/AppKernel.php
    
    public function registerBundles()
    {
      return array(
        // …
        new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
        // …
      );
    }
    

    然后我配置config.yml文件:

    # app/config/config.yml
    
    # Stof\DoctrineExtensionsBundle configuration
    stof_doctrine_extensions:
        orm:
            default:
                sluggable: true
    

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

    private $slug;
    

    然后我更新我的 News.orm.yml 文件 蛞蝓: 类型:字符串 长度:255 唯一:假 格莫: 蛞蝓: 分隔器: _ 款式:骆驼 领域: - 标题

    那我做

    doctrine:generate:entites myBundle:News
    

    还有`doctrine:schema:update --force

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

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

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

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

    <a href="{{ path('myroute_show_one_by_id', {'slug': news.slug}) }}">{{news.title}}</a>
    

    我希望这可以帮助其他人

    【讨论】:

      【解决方案2】:

      如果有人使用这篇旧文章作为向 URL 添加 slug 的参考,此功能已融入 Symfony 4。这篇文章 Symfony 4 routing from DB 展示了如何简单地使用

      use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
      /**
       * @Route("/page/{slug}")
       * @ParamConverter("page")
       */
      public function showAction(Page $page)
      {
      }
      

      它在我的测试项目中运行良好。希望这对某人有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-18
        • 2019-05-11
        • 2013-08-21
        • 2020-11-26
        • 2011-10-01
        • 2015-04-04
        • 1970-01-01
        • 2019-10-07
        相关资源
        最近更新 更多