【发布时间】:2020-07-31 09:53:37
【问题描述】:
是否可以在页面中打印 css 而不是使用 {{ encore_entry_link_tags('app') }} 生成链接标签?或者是否有其他解决方案来整合关键路径?
【问题讨论】:
是否可以在页面中打印 css 而不是使用 {{ encore_entry_link_tags('app') }} 生成链接标签?或者是否有其他解决方案来整合关键路径?
【问题讨论】:
由于声誉低,我无法添加评论,但请查看symfonycasts 提供了完整的解决方案。
基本上你应该解析 entrypoints.json 文件,找到你需要的合适的 css 文件。您可以为此使用EntrypointLookupInterface。然后获取该文件的内容并通过漂亮的自己的树枝扩展将其返回到模板。
class AppExtension extends AbstractExtension implements ServiceSubscriberInterface
{
private $publicDir;
public function __construct(ContainerInterface $container, string $publicDir)
{
$this->publicDir = $publicDir;
}
public function getFunctions(): array
{
return [
new TwigFunction('encore_entry_css_source', [$this, 'getEncoreEntryCssSource']),
];
}
public function getEncoreEntryCssSource(string $entryName): string
{
$files = $this->container
->get(EntrypointLookupInterface::class)
->getCssFiles($entryName);
$source = '';
foreach ($files as $file) {
$source .= file_get_contents($this->publicDir.'/'.$file);
}
return $source;
}
public static function getSubscribedServices()
{
return [
EntrypointLookupInterface::class,
];
}
}
您还必须将 publicDir 添加到您的 config/services.yaml 文件中
services:
_defaults:
bind:
string $publicDir: '%kernel.project_dir%/public'
然后在树枝模板中
{% apply inky_to_html|inline_css(encore_entry_css_source('email')) %}
{% endapply %}
【讨论】: