我尝试的每次搜索都会让我主持一些占位问题.那不是我的情况.让我们看看你们是否可以帮助我.提前致谢.
我的routing.yml文件:
mgfbw_blogslug:
path: /blog/{slug}
defaults: { _controller: MGFBWBundle:Blog:blogShow }
Run Code Online (Sandbox Code Playgroud)
我的blogShowAction:
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,
));
}
Run Code Online (Sandbox Code Playgroud)
我的blogshow.html.twig:
{% extends 'MGFTMBundle::layout.html.twig' %}
{% block title %}Title{% endblock %}
{% block heading %}Heading{% endblock %}
{% block content %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
我的layout.html.twig太长了无法粘贴,但我发誓它里面没有Twig {{path()}}调用.我经过双重检查.
所以从我的博客索引页面生成一个mgfbw_blogslug路径:
<a href="{{ path('mgfbw_blogslug', { 'slug': blog.slug }) }}">Comments</a> ({{ blog.comments.count }})
Run Code Online (Sandbox Code Playgroud)
这就是我的问题.在尝试了所有内容之后,我的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".
Run Code Online (Sandbox Code Playgroud)
谁有同样的问题?我没有在模板中生成任何路径!为什么我得到这个例外?
谢谢你的帮助.
博客实体上的getSlug方法返回null.你没有套装,但你的路线需要一个slu .. path方法不知道如何生成路由,因为缺少必需参数slug.
为你的路由中的slug参数添加一个默认值(并从你的控制器中捕获那个默认的slug渲染类似的东西 - 这个博文不存在).
mgfbw_blogslug:
path: /blog/{slug}
defaults: { _controller: MGFBWBundle:Blog:blogShow, slug: default_slug }
Run Code Online (Sandbox Code Playgroud)
和/或在twig中的路径方法中添加一个默认值,如下所示:
{{ path('route', {'slug': blog.slug|default('default_slug')}) }}
Run Code Online (Sandbox Code Playgroud)
检查控制器中的默认slug并为用户返回一些有用的信息.例
public function blogShowAction($slug)
{
if (!$slug) {
// ... return some template.
}
Run Code Online (Sandbox Code Playgroud)
最好的方法是使用@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
);
}
Run Code Online (Sandbox Code Playgroud)