如何在Symfony 2和Twig中包含CSS文件?
我正在玩Symfony2 ,我在Twig模板中遇到了包括CSS和JS文件在内的问题。
我有一个名为Webs/HomeBundle
的包,其中我有HomeController
与indexAction
呈现一个树枝模板文件:
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/
对?
问题
- 你在哪里放置你的资产文件,JS,CSS和图像? 把它们放在
Bundle/Resources/public
公用文件夹中可以吗? 这是他们的正确位置吗? - 如何使用资产function将这些资产文件包含在Twig模板中? 如果他们在公共文件夹,我怎么能包括他们?
- 我应该configuration别的东西吗?
除了将您的包path传递给asset()
函数,您正在做的都是正确的。
根据文档 – 在你的例子中,这应该看起来如下所示:
{{ asset('bundles/webshome/css/main.css') }}
提示 :你也可以调用资产:使用--symlink
键来安装,所以它会在web文件夹中创build符号链接。 当您经常应用js
或css
更改(这样,您的更改应用于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>