Ошибка Symfony: «Во время рендеринга шаблона возникло исключение»

Я пытаюсь включить

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

в моем файле ветки и отрендерить его. Но дает мне Неперехваченное исключение PHP Twig_Error_Runtime:

"An exception has been thrown during the rendering of a template ("Asset manifest file "/../public/build/manifest.json" does not exist.")

Это работает, когда я использую

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 раньше?

Łukasz Jakubek 18.07.2018 06:59

Все приведенные ниже решения не решили мою проблему. Есть другие предложения?

Ham Dong Kyun 22.07.2018 04:43

Ответ Сарата Кумара должен помочь. Как указывает ошибка, manifest.json не существует. Его можно создать автоматически после компиляции ресурсов. В конце концов, но команда yarn encore dev может решить проблему.

cezar 11.10.2018 11:26

Вашими активами управляет webpack-encore, поэтому вам просто нужно обновить свой код. Удалите метод asset (...) и откройте его содержимое. Webpack должен обрабатывать ваши активы за вас. Обновите свой код с этого <link href = "{{ asset('css/mystyle.css') }}" rel = "stylesheet"/> до этого <link href = "{{ 'css/mystyle.css' }}" rel = "stylesheet"/>

sylvery 17.02.2020 05:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
16
4
32 738
6

Ответы 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", "...": "..." }

Я решил эту проблему, не используя json_manifest_path: ~

закомментируйте json_manifest_path, добавив перед ним '#' и добавьте "~" после "assets:"

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

Помните, что вопрос помечен как Symfony4!

У меня такая же проблема с добавлением логотипа в навигационную панель, значок…

В Symfony4 больше нет каталога приложение, поэтому нет приложение / config / config.yml! В Symfony4 каталог сеть больше не существует, но есть новый каталог общественный

Как писал @Bijaya, просто укажите адрес href или src в публичном доступе

В моем случае у меня есть логотип: 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" />

Так что для меня, открывшего для себя Symfony4 без знания предыдущей версии Symfony, приятно, что не требуется функция актива или какая-либо другая конфигурация!

Выполните следующие команды:

yarn add --dev @symfony/webpack-encore

yarn add webpack-notifier --dev

yarn encore dev

Он сгенерирует файл manifest.json

Это правильный ответ. Для меня было достаточно запустить yarn install и yarn encore dev после установки Webpack Encore с composer. Официальный документация очень хорош и содержит все.

cezar 11.10.2018 11:24

yarn encore dev-server --hot создает файл manifest.json

Я решил эту проблему, не используя json_manifest_path: ~

закомментируйте json_manifest_path, добавив # перед ним и добавив ~ после assets:

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

Другие вопросы по теме