加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 使用Silex / SilexExtensions和Assetic的Twig中的动态CSS

发布时间:2020-12-13 13:45:52 所属栏目:PHP教程 来源:网络整理
导读:我想做什么:从数据库获取CSS属性并将其转储到较少的文件中.然后在其上应用较少的/ yui压缩过滤器,并将输出转储到我的树枝模板中. 让我马上来到这里: 我有一个PHP Web应用程序使用Silex和Twig作为模板引擎.为了处理和缩小css / js文件,我试图使用Assetic和S
我想做什么:从数据库获取CSS属性并将其转储到较少的文件中.然后在其上应用较少的/ yui压缩过滤器,并将输出转储到我的树枝模板中.

让我马上来到这里:

我有一个PHP Web应用程序使用Silex和Twig作为模板引擎.为了处理和缩小css / js文件,我试图使用Assetic和Silex-Twig / Assetic-Extensions.

我已经注册了silex扩展名,并设置了我想要使用的过滤器.现在我不知道如何将文件转储到我的枝条模板中. Google搜索让我在黑暗中.由于lessfile中的属性可以根据请求进行更改,我认为没有办法静态传递文件.

这是我实现的silex扩展:

$oApp = new SilexApplication();

//$oApp['autoloader']->registerNamespace('Assetic',DIR_VENDOR.'/assetic/src');
//$oApp['autoloader']->registerNamespace('SilexExtension',DIR_VENDOR.'/silex-extension/src');
//$oApp['autoloader']->registerNamespace('Twig',DIR_VENDOR.'/twig/lib');

$oApp->register(
    new SilexProviderTwigServiceProvider(),array(
        'twig.path' => DIR_ROOT.'/src/templates','twig.class_path' => DIR_VENDOR.'/twig/lib',),new SilexExtensionAsseticExtension(),array(
        'assetic.class_path' => DIR_VENDOR.'/assetic/src','assetic.path_to_web' => DIR_ASSETS,'assetic.options' => array(
            'debug' => false,'formulae_cache_dir' => DIR_TMP.'/Assetic/cache','twig_support' => true
        ),'assetic.filters' => $oApp->protect(function($fm) {
            $fm->set('yui_css',new AsseticFilterYuiCssCompressorFilter(
                DIR_YUI.'/yuicompressor-2.4.7.jar'
            ));
            $fm->set('yui_js',new AsseticFilterYuiJsCompressorFilter(
                DIR_YUI.'/yuicompressor-2.4.7.jar'
            ));
            $fm->set('googlecc_js',new AsseticFilterGoogleClosureCompilerJarFilter(
                DIR_GOOGLE_CC.'/compiler.jar'
            ));
        }),'assetic.assets' => $oApp->protect(function($am,$fm) {
            $am>-set('styles',new AsseticAssetAssetCache(
                new AsseticAssetGlobAsset(
                    __DIR__ . '/resources/css/*.css',array($fm->get('yui_css'))
                ),new AsseticCacheFilesystemCache(DIR_TMP.'/Assetic/cache')
            ));
            $am->get('styles')->setTargetPath(DIR_ASSETS.'/css/styles.css');
        })
    )
);

由于CSS文件通过较少的过滤器进行处理(变量值应来自数据库),因此我需要保存/缓存输出文件.我想我需要的是一个LazyAssetManager与一个将Output.css写入缓存目录的AssetWriter结合使用.但是我真的很努力地得到正确的包含我的twig模板内的语法.以下实现似乎不起作用:

{% stylesheets 'path/to/my/css' 'another/path/to/my/css' filter='yui_css' output='path/to/output/directory/styles.css' %}
<link href="{{ asset_url }}" rel="stylesheet" media="screen" />
{% endstylesheets %}

我感谢每一次关于我的关注.

由于(你提到)较少的文件中的属性可以根据请求改变,我认为你是错过的(甚至更少).听起来你正在尝试使用assetic作为一个较少的预处理器,缓存结果不是很少的理由(这取决于每个请求实际上会有多大的不同).

您不需要详细了解您想要实现的内容,但是我会发现它像主题引擎,用户可以在其中更改其配色方案(和其他外观变量).如果是这种情况,我想你应该将大部分的CSS /较少的文件放在一个模板中,所有请求都是通用的,然后在你的silex应用程序中有一个路由,用DB从变量提供主题特定的css.

由于每个请求可能会有所不同,我认为没有理由为每个请求在服务器上添加更少的预处理开销,因此您应该输出直接的CSS.最多可以让客户端处理.less文件,如果你很舒服.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读