Symfony2 cs-s-rewrite 过滤器的图像路径很遥远

Posted

技术标签:

【中文标题】Symfony2 cs-s-rewrite 过滤器的图像路径很遥远【英文标题】:Symfony2 cs-s-rewrite filter's image paths are way off 【发布时间】:2012-04-15 04:30:28 【问题描述】:

我正在尝试让 Symfony2 与 jQuery UI 一起工作。我已经让它的 javascript 部分工作得很好,但我无法让图像工作。

我在 Assetic 文档中读到的一件事是 cs-s-rewrite 过滤器可以获取 CSS 文件中的图像路径并更新它们,以便路径指向正确的位置。这看起来正是我所需要的,所以我启用了cs-s-rewrite。以下是cs-s-rewrite 如何改变我的路径:

// original
images/ui-icons_222222_256x240.png

// using cs-s-rewrite
../../../app/Resources/public/css/themes/base/images/ui-icons_222222_256x240.png

第一个路径不好。 cs-s-rewrite 路径至少指向文件系统中的正确路径,但相对于我的 webroot,cs-s-rewrite 路径已关闭。显然我的app 目录不是公开的。

如何让cs-s-rewrite 过滤器将路径更改为实际可行的路径?

这是我的样式表包含。 (是的,我知道我单独包含所有这些 CSS 文件的方式很愚蠢,但我现在并不担心。)

    % stylesheets
        '../app/Resources/public/css/*'
        '../app/Resources/public/css/themes/base/jquery.ui.accordion.css'
        '../app/Resources/public/css/themes/base/jquery.ui.all.css'
        '../app/Resources/public/css/themes/base/jquery.ui.autocomplete.css'
        '../app/Resources/public/css/themes/base/jquery.ui.base.css'
        '../app/Resources/public/css/themes/base/jquery.ui.button.css'
        '../app/Resources/public/css/themes/base/jquery.ui.core.css'
        '../app/Resources/public/css/themes/base/jquery.ui.datepicker.css'
        '../app/Resources/public/css/themes/base/jquery.ui.dialog.css'
        '../app/Resources/public/css/themes/base/jquery.ui.progressbar.css'
        '../app/Resources/public/css/themes/base/jquery.ui.resizable.css'
        '../app/Resources/public/css/themes/base/jquery.ui.selectable.css'
        '../app/Resources/public/css/themes/base/jquery.ui.slider.css'
        '../app/Resources/public/css/themes/base/jquery.ui.tabs.css'
        '../app/Resources/public/css/themes/base/jquery.ui.theme.css'
    %
        <link rel="stylesheet" href=" asset_url " />
    % endstylesheets %

【问题讨论】:

查看我的问题的答案,它有一个工作示例:***.com/questions/9500573/… 【参考方案1】:

有一些 known problems 带有 CssRewrite 过滤器。据我所知,使用 @BundleName 表示法无法正常工作,解决方法似乎是使用 bundles/bundle_name 路径链接 CSS 文件。

因此你的代码应该是这样的:

% stylesheets filter='cs-s-rewrite' 
        'bundles/<your_bundle_name>/css/*'
        'bundles/<your_bundle_name>/css/themes/base/jquery.ui.accordion.css'
        'bundles/<your_bundle_name>/css/themes/base/jquery.ui.all.css'
        'bundles/<your_bundle_name>/css/themes/base/jquery.ui.autocomplete.css'
        'bundles/<your_bundle_name>/css/themes/base/jquery.ui.base.css'
        'bundles/<your_bundle_name>/css/themes/base/jquery.ui.button.css'
        'bundles/<your_bundle_name>/css/themes/base/jquery.ui.resizable.css'
        'bundles/<your_bundle_name>/css/themes/base/jquery.ui.selectable.css'
        'bundles/<your_bundle_name>/css/themes/base/jquery.ui.slider.css'
        'bundles/<your_bundle_name>/css/themes/base/jquery.ui.tabs.css'
        'bundles/<your_bundle_name>/css/themes/base/jquery.ui.theme.css'
    %
        <link rel="stylesheet" href=" asset_url " />
    % endstylesheets %

&lt;your_bundle_name&gt; 显然是您正在处理的包的名称。

编辑:记得给出php app/console assets:install --symlink web 命令,以便将您的资产符号链接到web 目录。

【讨论】:

以上是关于Symfony2 cs-s-rewrite 过滤器的图像路径很遥远的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 - Assetic - css 字体图标

Symfony 资产捆绑

资产生成链接但没有文件

Symfony2 中的 Twig CamelCase 过滤器

Symfony2 和 Propel 包:向 Propel 参数转换器添加额外的过滤器

自定义 Symfony2 过滤器未使用自定义树枝标签触发