我正在尝试按照此页面上的说明加载我的Assets文件夹中的样式表:
https://symfony.com/doc/current/best_practices/web-assets.html
但我无法使用以下命令从base.html.twig导航到文件夹:
<link rel="stylesheet" type="text/css" href="/assets/css/style.css" />
我的文件结构如下:
templates
base.html.twig
assets
css
style.css
为什么这不起作用的任何想法?
答案 0 :(得分:3)
您可以尝试使用symfony的资产功能:
<link rel="stylesheet" href="{{ asset('css/style.css') }}" />
答案 1 :(得分:1)
在AppExtension中:
// register function here
public function getFunctions() {
return [
new TwigFunction('load_js_asset', array($this, 'fileGetJsAsset')),
];
}
// register filter here
public function getFilters() : array
{
return [
new TwigFilter('html_entity_decode',
[$this, 'html_entity_decode'],
['is_safe' => ['html']]),
}
/**
* @param string $string
* @return string
*/
public function html_entity_decode(string $string) : string {
return html_entity_decode($string);
}
/**
* @param string $file
* @param bool $embedScriptTag
* @return string
*/
public function fileGetJsAsset(string $file, bool $embedScriptTag = true) : string {
/** @var bool|string $content */
$content = file_get_contents(__DIR__ . '/../../assets/js/' . $file);
if ($content === false) {
throw new FileException('Could not found or read file: ' . $file);
}
if (!$embedScriptTag) {
return $content;
}
return '<script>' . $content . '</script>';
}
现在在您的视图中加载js资产,如下所示:
//从root assets / js文件夹加载
{{ load_js_asset('core/jquery.min.js', true)|html_entity_decode }}
{{ load_js_asset('core/popper.min.js')|html_entity_decode }}
{{ load_js_asset('my-beauty-js-file.js')|html_entity_decode }}`
我希望它有所帮助。
也许你还需要htmlspecialchars_decode过滤器。
答案 2 :(得分:0)
http://symfony.com/doc/3.4/best_practices/web-assets.html
资产功能在Symfony 4中仍然有用。
答案 3 :(得分:-1)
一些可能的解决方案 - 没有更多细节我不能确定他们是否肯定会解决问题:
首先,您是否配置了webpack-encore
并运行构建?如果没有这些资源,资源将不在那里,nginx
将生成404尝试路由到它。
其次,如果您使用Docker运行,则可能没有将./app/public/
文件夹挂载到nginx
容器上,以便可以提供文件。如果您在转到这些文件时收到Symfony 404,这可能就是问题所在。