Symfony 在BlockService中使用命名资产资源
我应该将哪个服务注入到我的自定义块服务中,以便使用assetic为特定于块的资源(js和css)生成有效的绝对url?我想要这样的东西:Symfony 在BlockService中使用命名资产资源,symfony,assetic,symfony-sonata,Symfony,Assetic,Symfony Sonata,我应该将哪个服务注入到我的自定义块服务中,以便使用assetic为特定于块的资源(js和css)生成有效的绝对url?我想要这样的东西: class CustomBlockService扩展了Sonata\BlockBundle\Block\BaseBlockService{ 受保护的$urlmaker; 函数构造($name、$templating、SomeService$urlmaker){ 父项::_构造($name,$templating); $this->urlmaker=$urlma
class CustomBlockService扩展了Sonata\BlockBundle\Block\BaseBlockService{
受保护的$urlmaker;
函数构造($name、$templating、SomeService$urlmaker){
父项::_构造($name,$templating);
$this->urlmaker=$urlmaker;
}
公共函数getStylesheets($media)
{
返回数组(
$this->urlmaker('treegrid_css');
);
}
公共函数getJavascripts($media)
{
返回数组(
$this->urlmaker('treegrid_js');
);
}
//其他同学
}
背景
我正在使用输出一些自定义块。有些块需要Java脚本(或css),而这些脚本在其他任何地方都不使用。因此,在我的基本模板中,我做了以下操作:
{% block javascripts %}
<!-- scripts on every page -->
{% javascripts
'@jquery_js'
'@bootstrap_js'
'@select2_js'
'@sonata_base_js'
%}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
<!-- BLOCK-SPECIFIC scripts -->
{{ sonata_block_include_javascripts('all') }}
{% endblock %}
My Symfony项目的建立是为了让Bower管理的组件在此活动:
%kernel.root.dir%/Resources/components/bower\u components
,一个相对于web
输出的路径
我有一个Assetic的配置文件Assetic.yml,它命名了我可能要包含的每个资源。通过这样做,当我从开发环境切换到产品环境时,我不必与Assetic就文件路径进行斗争。我也不必依赖与第三方软件包捆绑在一起的资源,除非我愿意。(例如,无数不同版本的jQuery,每个包一个!)
assetic.yml摘录
assets:
jquery_js:
inputs:
- '%kernel.root_dir%/Resources/components/bower_components/jquery/jquery.min.js'
jqueryui_js:
inputs:
- '%kernel.root_dir%/Resources/components/bower_components/jqueryui/ui/minified/jquery-ui.min.js'
- '%kernel.root_dir%/Resources/components/bower_components/jqueryui/ui/minified/i18n/jquery-ui-i18n.min.js'
bootstrap_js:
inputs:
- %kernel.root_dir%/Resources/components/bower_components/bootstrap/dist/js/bootstrap.min.js
treegrid_js:
inputs:
- %kernel.root_dir%/Resources/components/bower_components/treegrid/js/jquery.treegrid.js
- %kernel.root_dir%/Resources/components/bower_components/treegrid/js/jquery.treegrid.bootstrap3.js
main_css:
inputs:
- %kernel.root_dir%/Resources/components/css/main.css
filters: [cssrewrite]
treegrid_css:
inputs:
-%kernel.root_dir%/Resources/components/bower_components/treegrid/css/jquery.treegrid.css