【发布时间】: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