3

我尝试的每一次搜索都会让我遇到占位符问题。那不是我的情况。让我们看看你们是否可以帮助我。提前致谢。

我的 routing.yml 文件:

mgfbw_blogslug:
  path: /blog/{slug}
  defaults: { _controller: MGFBWBundle:Blog:blogShow }

我的博客ShowAction:

public function blogShowAction()
{
    $request = $this->getRequest();
    $slug = $request->get('slug');

    $em = $this->getDoctrine()->getEntityManager();

    $blog = $em->getRepository('MGFBWBundle:Blog')->findBySlug($slug);

    if (!$blog) {
        throw $this->createNotFoundException('No posts.');
    }

    return $this->render('MGFBWBundle:Blog:blogshow.html.twig', array(
        'blog' => $blog,
    ));
}

我的 blogshow.html.twig:

{% extends 'MGFTMBundle::layout.html.twig' %}
{% block title %}Title{% endblock %}
{% block heading %}Heading{% endblock %}
{% block content %}

{% endblock %}

我的 layout.html.twig 太长无法粘贴,但我发誓其中没有 Twig {{ path() }} 调用。我已经仔细检查过了。

因此,从我的博客索引页面中,我生成了一个 mgfbw_blogslug 路径:

<a href="{{ path('mgfbw_blogslug', { 'slug': blog.slug }) }}">Comments</a> ({{ blog.comments.count }})

我的问题来了。我的 blogshow.html.twig 故意为空,在尝试了一切之后,但我不断收到这个异常:

An exception has been thrown during the rendering of a template ("Some mandatory parameters are missing ("slug") to generate a URL for route "mgfbw_blogslug".") in "MGFBWBundle:Blog:blogshow.html.twig".

有人有同样的问题吗?我没有在模板中生成任何路径!我怎么会得到这个异常?

谢谢你的帮助。

4

2 回答 2

9

您博客实体上的 getSlug 方法返回 null。您没有 slug 集,但您的路线需要 slug。path 方法不知道如何生成路由,因为缺少强制参数 slug。

在您的路由中为 slug 参数添加一个默认值(并从您的控制器中捕获该默认 slug 呈现类似的东西 - 此博客文章不存在)。

mgfbw_blogslug:
   path: /blog/{slug}
   defaults: { _controller: MGFBWBundle:Blog:blogShow, slug: default_slug }

和/或在 twig 中为路径方法添加默认值,如下所示:

{{ path('route', {'slug': blog.slug|default('default_slug')}) }}

检查控制器中的默认 slug 并为用户返回一些有用的信息。例子

public function blogShowAction($slug)
{
    if (!$slug) {
       // ... return some template.
    }

最好的方法是使用@ParamConverter让您的实体自动从实体管理器中获取并传递给您的 blogShowAction 方法。也许使用@Template 来清理你的控制器。如果没有博客实体,ParamConverter 会抛出 NotFoundException,因此请确保正确捕获它。

/**
 * @ParamConverter("blog", options={"mapping": {"slug": "slug"}})
 * @Template('MGFBWBundle:Blog:blogshow.html.twig')
 */
public function blogShowAction(Blog $blog)
{
   return array(
    'blog' => $blog
    );
}
于 2013-05-28T12:44:44.537 回答
1

我认为您的 $blog 是一个空数组,它会通过您的检查,因此无法在此处设置 slug 参数{{ path('mgfbw_blogslug', { 'slug': blog.slug }) }}

您没有使用正确的方法来检索您的博客,并且异常抛出也不正确,因为findBy 方法返回数组。(与 php 数组方法不同)。

你应该这样尝试:

public function blogShowAction(Blog $blog)
{
    return $this->render('MGFBWBundle:Blog:blogshow.html.twig', array(
        'blog' => $blog,
    ));
}

博客 $blog 将隐式使用教义参数转换器,如果没有找到博客,它将抛出异常。

于 2013-05-28T14:34:54.407 回答