【问题标题】:Symfony Server crashes when extending FOSUserBundle's default template layout.html.twigSymfony 服务器在扩展 FOSUserBundle 的默认模板 layout.html.twig 时崩溃
【发布时间】:2016-05-20 15:40:06
【问题描述】:

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

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

DB 已启动并运行一切似乎都很好,除了我无法弄清楚如何从 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.

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

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

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

在文档中,总是只提到“FOSUserBundle”,我不知道如何确定该映射是否适合我项目中的路径。 对此问题的任何提示也非常受欢迎。

【问题讨论】:

  • 我希望你在 app 文件夹中创建 layout.html.twig 而不是在你的 bundle forlder 中?
  • @DenisAlimov 是的,我做到了。关于如何弄清楚发生了什么的任何想法?

标签: twig fosuserbundle symfony


【解决方案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。您可能不会扩展某些东西,也许您对此模板有单独的完整布局。

【讨论】:

  • 谢谢。你说的对。在文档中它说“此示例从您的应用程序的布局扩展布局模板......”。我误解了这一点,并认为这意味着 Bundle 中的“layout.html.twig”。但是,删除延长线可以修复它。我在这里还有一个问题:谁能告诉映射“FOSUserBundle”到存储在“/friendsofsymfony/user-bundle/”下的包是如何发生的?我没有找到任何定义此映射的映射表或类似信息。当我想将 Bundle 文件夹添加到我的“app/Resources”文件夹时,如何知道使用哪个文件夹名称?
  • @user3440145 您应该在单独的问题中询问详细信息
  • 是的 - 我会这样做的。
【解决方案2】:

崩溃确实有道理。

当你写的时候:

{% 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 在评论中建议的那样。

【讨论】:

  • 感谢您的回答(以及@DenisAlimov)。 “layout.html.twig”位于“../myProject/app/Resources/FOSUserBundle/views/layout.html.twig”。你的解释很有道理。但是我确实在提到的位置提供了“layout.html.twig”。所以我认为我的两种尝试都应该奏效。仍然没有。关于如何找到原因的任何提示?
  • 我编辑了关于 FOSUserBundle 安装路径的问题。这可能包含任何有用的信息吗?
猜你喜欢
  • 2019-01-10
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多