【问题标题】:Combining HeadScript javascript with widmogrod/zf2-assetic-module and js in multiple modules在多个模块中结合 HeadScript javascript 与 widmogrod/zf2-assetic-module 和 js
【发布时间】:2013-08-20 19:53:21
【问题描述】:

遇到了一些障碍,我找不到任何支持文档。我的用例相当简单。 Application 模块具有应该进入头部的 javascript,而我的其他模块之一 Foo 也有应该进入头部的脚本。我认为这个 Assetic 模块可以解决这个问题。以下是我的推断:

应用程序配置

/**
 * Assetic
 */
'assetic_configuration' => array(

    'buildOnRequest'    => true,
    'cacheEnabled'      => false,
    'webPath'           => realpath('public/assets'),
    'basePath'          => 'assets',


     'default' => array(

        'assets' => array(
            '@base_css',
            '@head_js',
        ),

        'options' => array(
            'mixin' => true,
        ),
    ),

     'modules' => array(

        'application' => array(

            # module root path for yout css and js files
            'root_path' => __DIR__ . '/../assets',

            # collection of assets
            'collections' => array(

                'base_css' => array(
                    'assets' => array(
                        'css/*.css',
                    ),
                    'filters' => array(),
                    'options' => array(),
                ),

                'head_js' => array(
                    'assets' => array(
                        'js/*.js',
                    ),
                    'filters' => array(),
                ),

                'base_images' => array(
                    'assets'=> array(
                        'images/*.png',
                    ),
                    'options' => array(
                        'move_raw' => true,
                    )
                ),
            ),
        ),
    ),
),

然后在我的 Foo 模块中...

Foo 模块配置

/**
 * Assetic
 */
'assetic_configuration' => array(

     'default' => array(
        'assets' => array(
            '@base_css',
            '@head_js',
        ),

        'options' => array(
            'mixin' => true,
        ),
    ),


    'modules' => array(

        'foo' => array(

            # module root path for yout css and js files
            'root_path' => __DIR__ . '/../assets',

            # collection of assets
            'collections' => array(

                'base_css' => array(
                    'assets' => array(
                        'css/*.css'
                    ),
                    'filters' => array(),
                    'options' => array(),
                ),

                'head_js' => array(
                    'assets' => array(
                        'js/*.js' // relative to 'root_path'
                    ),
                    'filters' => array(),
                    'options' => array(),
                ),

                'base_images' => array(
                    'assets'=> array(
                        'images/*.png'
                    ),
                    'options' => array(
                        'move_raw' => true,
                    )
                ),
            ),
        ),
    ),
),

不幸的是,有了这个配置,只有 Foo 模块的 javascript 进入了 head_js.js。我感觉就像米尔顿在里面的那个表情包,“我被告知会有资产合并!” :)

感谢您提供的任何帮助。

谢谢!

【问题讨论】:

  • 请注意,如果我丢弃模块->foo->head_js,那么应用程序中的 head_js确实会进入。
  • 因此,模块配置文件发生的一件事是它们都合并在一起,并且某些键(特别是与 DiC 之一不相关的键)被覆盖。它允许您覆盖默认配置。有可能这就是这里发生的事情,而且由于“应用程序”和“foo”是不同的键,我不明白为什么它们会相互覆盖。尝试从控制器 $this->getServiceLocator()->get('Config') 转储配置,并查看是否所有键都按照 Assetic 配置的应有(合并)出现。
  • 嘿,谢谢你试一试阿德里安。好像不是配置问题。我试图避免破解源代码以试图理解它。
  • 那么问题可能在于 Assetic 模块如何处理配置键。您的评论表明(假设您在模块应用程序之后加载模块 Foo) Foo 的配置以某种方式覆盖或优先于应用程序配置。所以,如果它不是如何合并配置,那么它可能是关于 Assetic 如何读取配置数组。祝你好运!

标签: php zend-framework2 assetic


【解决方案1】:

好的 - 我已经想通了。希望有一天这对其他人有所帮助。我上面提到的配置密钥并不是不准确的——但是——当考虑到一个秘密的未记录的特性时,它们没有被正确地设计;必须打开源代码才能了解在资产包中包含“head”这个词实际上会在 head 中自动加载它。最后,这是一个不错的功能,但当您不知道时,它确实令人头疼。

【讨论】:

  • 谢谢!我试图在 head 部分加载一个脚本,但我找不到任何地方如何使用它,我也正要破解代码,但我尝试了堆栈溢出,我很高兴我做到了。
猜你喜欢
  • 2013-02-23
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多