'Symfony Error: "An exception has been thrown during the rendering of a template"
I am trying to include
<link href="{{ asset('css/mystyle.css') }}"
rel="stylesheet"/>
in my twig file and render it. But it gives me Uncaught PHP Exception Twig_Error_Runtime:
"An exception has been thrown during the rendering of a template ("Asset manifest file "/../public/build/manifest.json" does not exist.")
It does work when i use
link href="css/mystyle.css"
rel="stylesheet"/>
. Following is my controller:
<?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');
}
}
Following is my twig template:
<!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>
How can i resolve this issue?
Solution 1:[1]
Execute the below commands:
yarn add --dev @symfony/webpack-encore
yarn add webpack-notifier --dev
yarn encore dev
It will generate the manifest.json file
Solution 2:[2]
I have resolved this problem by not using json_manifest_path: ~
comment out the json_manifest_path by adding '#' in front of it and add '~' after 'assets:'
framework:
assets: ~
#json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'
Solution 3:[3]
yarn encore dev-server --hot
creates the manifest.json file
Solution 4:[4]
manifest.json is new in Symfony 3.3.
So, you should have this lines in your config file :
# app/config/config.yml framework: # ... assets: json_manifest_path: '%kernel.root_dir%/../web/build/manifest.json'
If manifest.json isn't exists, you should create it, like this :
{ "css/app.css": "build/css/mystyle.b916426ea1d10021f3f17ce8031f93c2.css", "...": "..." }
Solution 5:[5]
I have resolved this problem by not using json_manifest_path: ~
comment out the json_manifest_path by adding #
in front of it and add ~
after assets:
framework:
assets: ~
#json_manifest_path: '%kernel.project_dir%/public/build/manifest.json'
Solution 6:[6]
Execute this command:
composer remove webpack
Solution 7:[7]
Hello I had the same probleme and I've found this as a solution, you only have tu run this "composer require symfony/webpack-encore-bundle". If it does not work try to run "npm build run" or "npm run watch", but before run it make sure that Node.js is installed as well as npm.
good luck
Solution 8:[8]
Remember that the question is tagged Symfony4!
I have the same issue to add logo in navbar, favicon…
In Symfony4, there are no more app directory, so no app/config/config.yml ! In Symfony4, web directory doesn't exist anymore but there are new directory public
As @Bijaya wrote, just specify href or src address in public
In my case, I have my logo: myProjectName/public/logo_mom.png
and in my controller, I have:
/**
* @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",
]);
}
and in my home.html.twig:
{% block body %}
<h1>{{ title }}</h1>
<img src={{ logo_path }} alt={{ logo_alt}}>
and in my template/base.html.twig:
<link rel="icon" type="image/x-icon" href="favicon.ico" />
So for me who discover Symfony4 without previous Symfony version knowledge, it is nice that doesn't required asset function or any other configuration!
Solution 9:[9]
If removing json_manifest_path
from framework.yaml
did not help you, then just create a file in public/build/manifest.json
. Put an empty json in the file: {}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow