Symfony 错误:“在渲染模板期间引发了异常”

Posted

技术标签:

【中文标题】Symfony 错误:“在渲染模板期间引发了异常”【英文标题】:Symfony Error: "An exception has been thrown during the rendering of a template" 【发布时间】:2018-12-25 20:50:49 【问题描述】:

我正在尝试包含

<link href=" asset('css/mystyle.css') "
      rel="stylesheet"/> 

在我的树枝文件中并渲染它。但它给了我未捕获的 PHP 异常 Twig_Error_Runtime:

"在渲染模板的过程中抛出了异常 (“资产清单文件”/../public/build/manifest.json“不 存在。”)

当我使用它时它确实有效

link href="css/mystyle.css"
          rel="stylesheet"/>

。 以下是我的控制器:

    <?php

namespace App\Controller;

use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;

class WelcomeController extends AbstractController

    /**
     * @Route("/", name="welcome")
     */
    public function index()
    
        return $this->render('welcome/index.html.twig');
    

以下是我的树枝模板:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>Let's Explore Symfony 4</title>

    <!-- Bootstrap core CSS -->
    <link rel="stylesheet"
          href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.3/css/bootstrap.min.css"
          integrity="sha384-Zug+QiDoJOrZ5t4lssLdxGhVrurbmBWopoEl+M6BdEfwnCJZtKxi1KgxUyJq13dy"
          crossorigin="anonymous">

    <link href=" asset('css/mystyle.css') "
          rel="stylesheet"/>

</head>

<body>
<header>
    <nav class="navbar navbar-expand-sm navbar-dark bg-dark">
        <div class="container">

            <a class="navbar-brand" href="#">Home</a>

            <div class="collapse navbar-collapse">
                <ul class="navbar-nav mr-auto">
                    <li class="nav-item">
                        <a class="nav-link" href="#">Hello Page</a>
                    </li>
                </ul>
            </div>
        </div>

    </nav>
</header>

<main role="main" class="container main">
    <div>
        <h1>Let's Explore Symfony 4</h1>
        <p class="lead">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras rutrum sapien mauris, venenatis
            facilisis neque tincidunt vel. Maecenas vel felis vel turpis scelerisque eleifend. Fusce nec purus egestas,
            efficitur nisi ac, ultrices nulla. Pellentesque eu mollis tortor, in mollis nisl. Maecenas rhoncus quam non
            lacinia mollis.</p>
    </div>
</main>
</body>
</html>

我该如何解决这个问题?

【问题讨论】:

你之前执行过 bin/console asset:install 吗? 以下所有解决方案都没有解决我的问题。还有其他建议吗? Sarath Kumar 的回答应该会有所帮助。正如错误指出的那样,manifest.json 不存在。编译资产后可以自动创建它。最终只需输入命令yarn encore dev 即可解决问题。 你的资产由 webpack-encore 管理,所以你只需要更新你的代码。删除asset(...) 方法并公开它的内容。 Webpack 应该为您处理您的资产。将您的代码从 &lt;link href=" asset('css/mystyle.css') " rel="stylesheet"/&gt; 更新为 &lt;link href=" 'css/mystyle.css' " rel="stylesheet"/&gt; 【参考方案1】:

我已经通过不使用json_manifest_path: ~解决了这个问题

通过在前面添加# 注释掉json_manifest_path,并在assets: 之后添加~

framework:
    assets: ~
        #json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'

【讨论】:

【参考方案2】:

yarn encore dev-server --hot 创建 manifest.json 文件

【讨论】:

【参考方案3】:

执行以下命令:

yarn add --dev @symfony/webpack-encore

yarn add webpack-notifier --dev

yarn encore dev

它会生成 manifest.json 文件

【讨论】:

这是正确的答案。对我来说,在使用 composer 安装 Webpack Encore 之后运行 yarn installyarn encore dev 就足够了。官方documentation很好,包罗万象。【参考方案4】:

请记住,该问题已标记为 Symfony4

我在导航栏中添加徽标时遇到同样的问题,favicon…

在 Symfony4 中,没有更多的 app 目录,所以没有 app/config/config.yml ! 在 Symfony4 中,web 目录不再存在,但有新目录 public

正如@Bijaya 所写,只需公开指定hrefsrc 地址

就我而言,我有我的徽标:myProjectName/public/logo_mom.png

在我的控制器中,我有:

/**
 * @Route("/", name="home")
 */
public function home() 
    return $this->render('blog/home.html.twig', [
        'title' => "Bienvenue",
        'logo_path' => "logo_mom.png",
        'logo_alt' => "logo alt description",
    ]);

在我的home.html.twig中:

% block body %
    <h1> title </h1>
    <img src= logo_path  alt= logo_alt>

在我的 template/base.html.twig 中:

<link rel="icon" type="image/x-icon" href="favicon.ico" />

所以对于在没有以前的 Symfony 版本知识的情况下发现 Symfony4 的我来说,不需要资产功能或任何其他配置是很好的!

【讨论】:

【参考方案5】:

我已经通过不使用 json_manifest_path 解决了这个问题:~

在 json_manifest_path 前面添加 '#' 注释掉它 并在“资产:”之后添加“~”

framework:
    assets: ~
        #json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'

【讨论】:

【参考方案6】:

manifest.json 是 Symfony 3.3 中的新内容。

所以,你应该在你的配置文件中有这行:

# app/config/config.yml
framework:
    # ...
    assets:
        json_manifest_path: '%kernel.root_dir%/../web/build/manifest.json'

如果 manifest.json 不存在,您应该创建它,如下所示:

“css/app.css”:“build/css/mystyle.b916426ea1d10021f3f17ce8031f93c2.css”, “……”:“……”

【讨论】:

以上是关于Symfony 错误:“在渲染模板期间引发了异常”的主要内容,如果未能解决你的问题,请参考以下文章

Sonata 管理员搜索功能:尚未设置请求对象

在奏鸣曲管理员中,我们如何拥有多个级别的子管理员

Symfony Mercure 错误 Symfony\Component\Mercure\PublisherInterface

symfony内存不足错误

当我尝试通过更改 `extra.symfony.require` 来升级 Symfony 时,为啥会出现此错误?

Symfony FormType 构造错误