Я пытаюсь включить
<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>
Как я могу решить эту проблему?
Все приведенные ниже решения не решили мою проблему. Есть другие предложения?
Ответ Сарата Кумара должен помочь. Как указывает ошибка, manifest.json не существует. Его можно создать автоматически после компиляции ресурсов. В конце концов, но команда yarn encore dev может решить проблему.
Вашими активами управляет webpack-encore, поэтому вам просто нужно обновить свой код. Удалите метод asset (...) и откройте его содержимое. Webpack должен обрабатывать ваши активы за вас. Обновите свой код с этого <link href = "{{ asset('css/mystyle.css') }}" rel = "stylesheet"/> до этого <link href = "{{ 'css/mystyle.css' }}" rel = "stylesheet"/>






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. Официальный документация очень хорош и содержит все.
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'
Вы выполнили bin / console asset: install раньше?