我有一个“Article(文章)”实体,并且我在三个twig模板中使用path()函数,提供作为第二个参数的文章“slug”来获取显示一篇文章的URL。但是我知道这不是最好的方法,因为如果我想要提供ID而不是slug,我需要在多个模板中更改代码。我考虑在Article类中使用getUrl()方法,但我无法使用Route服务生成URL。在Symfony 4中有更好的方法吗?这是“ArticleController”的一部分内容:
然后在模板中,我有一个类似于这样的代码:
我希望能编写如下的代码:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\Article;
use App\Repository\ArticleRepository;
class ArticleController extends AbstractController
{
...
/**
* @Route("/article/{slug}", name="article_show")
*/
public function show(Article $article) {
return $this->render('article/show.html.twig', [
'article' => $article
]);
}
}
然后在模板中,我有一个类似于这样的代码:
{% for article in articles %}
...
<a href="{{ path('article_show',{ 'slug': article.slug } ) }}">
{{ article.title }}
</a>
...
{% endfor %}
我希望能编写如下的代码:
```
{% for article in articles %}
...
<a href="{{ article.getUrl() }}">
{{ article.title }}
</a>
...
{% endfor %}
getUrl方法完成了path()方法的工作,因此如果我在路由中进行更改,它将反映在所有模板中,但我不能这样做,因为我无法在Article实体中获取Route服务。
那么有没有其他方法可以实现相同的目标呢?
DynamicRouter
并定义一个RouteProvider
,为你的Entity
提供路由。 - Somrlik