如何在Symfony 2和Twig中包含CSS文件?

我正在玩Symfony2 ,我在Twig模板中遇到了包括CSSJS文件在内的问题。

我有一个名为Webs/HomeBundle的包,其中我有HomeControllerindexAction呈现一个树枝模板文件:

 public function indexAction() { return $this->render("WebsHomeBundle:Home:index.html.twig"); } 

所以这很简单 现在我想要做的是在这个Twig模板中包含一些CSS和JS文件。 模板看起来像这样:

 <!DOCTYPE html> <html> <head> {% block stylesheets %} <link href="{{ asset('css/main.css') }}" type="text/css" rel="stylesheet" /> {% endblock %} </head> <body> </body> </html> 

我想包括的文件main.css文件位于:

 Webs/HomeController/Resources/public/css/main.css 

所以我的问题是,基本上,我怎么会包括简单的CSS文件里面的小枝模板?

我正在使用Twig asset()函数,它只是没有命中正确的CSSpath。 另外,我在控制台中运行这个命令:

 app/console assets:install web 

这创build了一个新的文件夹

 /web/bundles/webshome/... 

这只是连接到

 src/Webs/HomeController/Resources/public/ 

对?

问题

  1. 你在哪里放置你的资产文件,JS,CSS和图像? 把它们放在Bundle/Resources/public公用文件夹中可以吗? 这是他们的正确位置吗?
  2. 如何使用资产function将这些资产文件包含在Twig模板中? 如果他们在公共文件夹,我怎么能包括他们?
  3. 我应该configuration别的东西吗?

除了将您的包path传递给asset()函数,您正在做的都是正确的。

根据文档 – 在你的例子中,这应该看起来如下所示:

 {{ asset('bundles/webshome/css/main.css') }} 

提示 :你也可以调用资产:使用--symlink键来安装,所以它会在web文件夹中创build符号链接。 当您经常应用jscss更改(这样,您的更改应用于src/YouBundle/Resources/public将立即反映到web文件夹中而无需调用assets:install再次assets:install )时,这非常有用:

 app/console assets:install web --symlink 

此外,如果您希望在您的子模板中添加一些资源,则可以调用Twig块的parent()方法。 在你的情况下,会是这样的:

 {% block stylesheets %} {{ parent() }} <link href="{{ asset('bundles/webshome/css/main.css') }}" rel="stylesheet"> {% endblock %} 

你可以使用%样式表%(资产特征)标签:

 {% stylesheets "@MainBundle/Resources/public/colorbox/colorbox.css" "%kerner.root_dir%/Resources/css/main.css" %} <link type="text/css" rel="stylesheet" media="all" href="{{ asset_url }}" /> {% endstylesheets %} 

您可以将path写入css作为参数(%parameter_name%)。

更多关于这个变种: http : //symfony.com/doc/current/cookbook/assetic/asset_management.html

其他答案是有效的,但官方Symfony最佳实践指南build议使用web/文件夹来存储所有资产,而不是不同的捆绑包。

将您的networking资产分散在数十个不同的捆绑包中使其更难以pipe理。 如果所有应用程序资产都位于同一位置,则devise人员的生活将变得更加简单。

模板也从集中您的资产受益,因为链接更简洁,

我build议你只将微资源放在微分组中,比如只有buttonbutton需要的几行样式。

如果您使用Silex,请将Symfony Asset添加为依赖项:

 composer require symfony/asset 

那么你可以注册资产服务提供者

 $app->register(new Silex\Provider\AssetServiceProvider(), array( 'assets.version' => 'v1', 'assets.version_format' => '%s?version=%s', 'assets.named_packages' => array( 'css' => array( 'version' => 'css2', 'base_path' => __DIR__.'/../public_html/resources/css' ), 'images' => array( 'base_urls' => array( 'https://img.example.com' ) ), ), )); 

然后在你的树枝模板文件头部分:

 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> {% block head %} <link rel="stylesheet" href="{{ asset('style.css') }}" /> {% endblock %} </head> <body> </body> </html>