Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 空小枝模板不断抛出“;缺少一些必需的参数";例外_Symfony_Twig - Fatal编程技术网

Symfony 空小枝模板不断抛出“;缺少一些必需的参数";例外

Symfony 空小枝模板不断抛出“;缺少一些必需的参数";例外,symfony,twig,Symfony,Twig,我尝试的每一次搜索,都会让我遇到占位符问题。那不是我的情况。看看你们能不能帮我。提前谢谢 My routing.yml文件: mgfbw_blogslug: path: /blog/{slug} defaults: { _controller: MGFBWBundle:Blog:blogShow } 我的博客行动: public function blogShowAction() { $request = $this->getRequest(); $slug =

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

My routing.yml文件:

mgfbw_blogslug:
  path: /blog/{slug}
  defaults: { _controller: MGFBWBundle:Blog:blogShow }
我的博客行动:

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,
    ));
}
My 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 }})
有人有同样的问题吗?我没有在模板中生成任何路径!我怎么会有这个例外


感谢您的帮助。

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

在路由中为slug参数添加一个默认值(并从控制器捕获默认slug,呈现类似这样的内容-此blogpost不存在)

和/或向细枝中的路径方法添加默认值,如下所示:

{{ path('route', {'slug': blog.slug|default('default_slug')}) }}
public function blogShowAction(Blog $blog)
{
    return $this->render('MGFBWBundle:Blog:blogshow.html.twig', array(
        'blog' => $blog,
    ));
}
检查控制器中的默认slug,并为用户返回一些有用的信息。范例

public function blogShowAction($slug)
{
    if (!$slug) {
       // ... return some template.
    }
最好的方法是使用自动从实体管理器获取实体并将其传递给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
    );
}

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

您没有使用正确的方法检索日志,并且异常抛出也不正确。(与php数组方法不同)

你应该这样做:

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

Blog$Blog将隐式使用doctrine param converter,如果找不到Blog,它将抛出异常。

问题是,异常没有为错误声明一行,我甚至不知道在哪里查找……您是否与showAction一样处理索引操作?不过,不太清楚您的索引页是什么,也不清楚发生此异常时您所在的url是什么。