扩展FOSUserBundle的默认模板layout.html.twig时,Symfony Server崩溃

时间:2016-05-20 15:40:07

标签: twig fosuserbundle symfony

我正在尝试从FOSUserBundle运行基本用户登录。 我正在使用Symfony 3.0.6。

我按照说明设置了FOSUserBundle中的所有内容: https://symfony.com/doc/master/bundles/FOSUserBundle/index.html

数据库启动并运行一切似乎都很好,除了我无法弄清楚如何从FOSUserBundle覆盖layout.html.twig。 为了达到这个目的,我按照这个描述 https://symfony.com/doc/master/bundles/FOSUserBundle/overriding_templates.html

我现在在“Resources / FOSUserBundle / views”文件夹中有一个文件“layout.html.twig”,其内容与上面提供的最后一个链接相同。 这会导致以下错误:

  

无法找到模板“layout.html.twig”(查看:   [somePathInfo])在第1行的FOSUserBundle :: layout.html.twig中。

现在我将“layout.html.twig”模板中的第一行更改为

{% extends 'FOSUserBundle::layout.html.twig' %}

然后这导致symfony服务器崩溃说明

>php bin/console server:run -v                                                                                                                       
 [OK] Server running on http://127.0.0.1:8000                                                                           
 // Quit the server with CONTROL-C.
  RUN  "C:\xampp\php\php.exe" "-S" "127.0.0.1:8000" "[PATH]\myProject\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Resources\config\router_dev.php"
  RES  -1073741571 Command did not run successfully
 [ERROR] Built-in server terminated unexpectedly.

我被困在这里...... 任何想法都非常受欢迎。

编辑:作曲家安装的FOSUserBundle(我通过当前的PHP-Storm插件使用)安装在路径上:

[projectPath]\vendor\friendsofsymfony\user-bundle\Resources\views\layout.html.twig

在文档中然而,仅提及“FOSUserBundle”并且我不知道如何确定该映射是否适合我的项目中的路径。 这个问题的任何提示都非常好。

2 个答案:

答案 0 :(得分:1)

崩溃确实有意义。

当你写:

{% extends 'FOSUserBundle::layout.html.twig' %}

Symfony将首先尝试加载app/Resources/FOSUserBundle/views/layout.html.twig。未能找到该文件将返回到类似的路径,但在vendor目录中。如果你试图从你的FOS覆盖模板中扩展FOS的模板,那将创建递归循环:

app/Resource/FOSUserBundle/views/layout.html.twig 
^^ extends  
app/Resource/FOSUserBundle/views/layout.html.twig
^^ extends
app/Resource/FOSUserBundle/views/layout.html.twig
....
and so on...

所以,这不是解决问题的方法。

确保您的模板放在app目录中,而不是您的包,正如Denis Alimov在评论中所建议的那样。

答案 1 :(得分:1)

当您覆盖标准FOSUser布局时,您需要将布局放入app/Resources/FOSUserBundle/views/layout.html.twig。太棒了,你这样做了。它只是一个布局,它不应该扩展标准的FOSUser布局,所以删除行{% extends 'FOSUserBundle::layout.html.twig' %}。但通常开发人员会制作一个基本布局,在我的情况下它是\app\Resources\views\base.html.twig,所以如果我想覆盖fosuser布局,我会在app/Resources/FOSUserBundle/views/layout.html.twig这样的东西

{% extends 'base.html.twig' %}

{% block title %}User Management{% endblock %}

{% block content %}
    {% block fos_user_content %}{% endblock %}
{% endblock %}

在第一行中,您扩展基本布局而不是FOSUser。您可能无法扩展某些内容,也许您为此模板提供了单独的完整布局。