web-dev-qa-db-fra.com

Erreur Symfony: "Une exception a été levée lors du rendu d'un modèle"

J'essaye d'inclure 

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

dans mon fichier de brindille et le rendre. Mais cela me donne Uncaught PHP Exception Twig_Error_Runtime:  

"Une exception a été générée lors du rendu d'un modèle (" Le fichier manifeste de l'actif "/../public/build/manifest.json" n'est pas Exist. ".)

Ça marche quand j'utilise 

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

. Voici mon contrôleur:

    <?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');
    }
}

Voici mon modèle de brindille:

<!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>

Comment puis-je résoudre ce problème?

8
Bijaya Basnet

Exécutez les commandes ci-dessous:

yarn add --dev @symfony/webpack-encore

yarn add webpack-notifier --dev

yarn encore dev

Il va générer le fichier manifest.json

7
Sarath Kumar

Essayez d'installer Assets Bundle:

composer require symfony/asset
0
Imanali Mamadiev

Rappelez-vous que la question est marquée Symfony4 !

J'ai le même problème pour ajouter un logo dans navbar, favicon…

Dans Symfony4, il n'y a plus de répertoire app, donc pas de app/config/config.yml! Dans Symfony4, le répertoire web n'existe plus, mais il y a un nouveau répertoire Publique

Comme @Bijaya l'a écrit, spécifiez simplement l'adresse href ou src en public

Dans mon cas, j'ai mon logo: myProjectName/public/logo_mom.png

et dans mon contrôleur, j'ai:

/**
 * @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",
    ]);
}

et dans mon home.html.twig:

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

et dans mon template/base.html.twig:

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

Donc, pour moi qui découvre Symfony4 sans connaissance préalable de la version de Symfony, c’est Nice qui n’a pas besoin de la fonction Actif ni de toute autre configuration!

0
bcag2

manifest.json est une nouveauté de Symfony 3.3.

Donc, vous devriez avoir ces lignes dans votre fichier de configuration: 

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

Si manifest.json n'existe pas, vous devriez le créer, comme ceci: 

{ "css/app.css": "build/css/mystyle.b916426ea1d10021f3f17ce8031f93c2.css", "...": "..." }

0
Allan

yarn encore dev-server --hot crée le fichier manifest.json

0
nadjib chiheb

J'ai résolu ce problème en n'utilisant pas json_manifest_path: ~

commentez json_manifest_path en ajoutant '#' devant celui-ci .__ et en ajoutant '~' après 'assets:'

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