Symfony:在我的文章url中生成slug url而不是news id

问题描述 投票:4回答:2

我想要一个像这样的网址:

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

而不是这一个:

www.mysite.com/7

'7'是我的新闻对象的id属性。

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

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

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

或者也许你可以给我一个关于解决方案的链接。

routing doctrine symfony slug
2个回答
4
投票

编辑我使用Symfony 3.2

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

首先从symfony doc中读取这个。使用ConvertParamater实现http://symfony.com/doc/current/best_practices/controllers.html#using-the-paramconverter非常容易

实施后:

安装StofDoctrineExtensionBundle

在composer.json中

“require”:{“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文件slug:type:string length:255 unique:false gedmo:slug:separator:_ style:camel fields: - title

然后我做

doctrine:generate:entites myBundle:News

还有`doctrine:schema:update --force

这在我的新闻表中创建了一个slug字段。因为这个字段可能不是null,所以我手动输入了一些值,因此我的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>

我希望这可以帮助别人


0
投票

如果有人使用这个旧帖子作为向网址添加slugs的参考,这个功能被纳入Symfony 4.这篇文章Symfony 4 routing from DB显示了如何使用它只是使用

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

它在我的测试项目中工作得非常好。希望这有助于某人!

© www.soinside.com 2019 - 2024. All rights reserved.