Комбиниране на HeadScript javascript с widmogrod/zf2-assetic-module и js в множество модули

Натъквам се на малко препятствие и не мога да намеря подкрепяща документация. Моят случай на използване е доста прост. Модулът 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,
                    )
                ),
            ),
        ),
    ),
),

С тази конфигурация, за съжаление, само javascript на модула Foo си проправя път в head_js.js. Чувствам се като онзи мем с Милтън в него, казвайки „Казаха ми, че ще има комбиниране на активи!“ :)

Всяка помощ, която можете да предложите, се оценява.

Благодаря!


person Saeven    schedule 20.08.2013    source източник
comment
Като забележка, ако изтрия modules-›foo-›head_js, тогава head_js в приложенията наистина си проправя път.   -  person Saeven    schedule 21.08.2013
comment
Така че едно от нещата, които се случват с конфигурационните файлове на модула, е, че всички те се обединяват и някои ключове (особено тези, които не са свързани с един от DiC) се отменят. Което ви позволява да замените конфигурациите по подразбиране. Възможно е това да се случва тук, тъй като 'application' & 'foo' са различни ключове, не виждам защо те ще се заменят един друг. Опитайте да направите дъмп на конфигурацията от контролер, $this->getServiceLocator()->get('Config'), и вижте дали всички ключове се показват както трябва (обединени) за конфигурацията на Assetic.   -  person Adrian    schedule 21.08.2013
comment
Хей, благодаря, че се намеси, Адриан. Изглежда не е проблем с конфигурацията. Опитвах се да избегна отварянето на източника, за да се опитам да го разбера.   -  person Saeven    schedule 21.08.2013
comment
Тогава проблемът вероятно е в това как модулът Assetic обработва конфигурационните ключове. Това, което предполага вашият коментар, е, че (ако приемем, че зареждате Module Foo след Module Application) конфигурацията за Foo по някакъв начин отменя или има предимство пред конфигурацията на приложението. Така че, ако не е в това как конфигурациите се обединяват, тогава вероятно е в това как Assetic чете конфигурационния масив. Късмет!   -  person Adrian    schedule 21.08.2013


Отговори (1)


Добре - разбрах го. Надяваме се, че това ще помогне на някой друг един ден. Конфигурационните ключове, които отбелязах по-горе, не бяха неточни -- но -- те не бяха изработени правилно, когато се разглежда тайна недокументирана функция; трябваше да разбия източника, за да науча, че включването на думата „глава“ в пакет с активи всъщност го зарежда автоматично в главата. Това е хубава функция в крайна сметка, но наистина драска главата, когато не сте наясно с това.

person Saeven    schedule 23.08.2013
comment
Благодаря ти! Опитвах се да заредя скрипт в секцията head, но не можах да намеря никъде как да го използвам, щях да разбия и кода, но опитах препълването на стека и се радвам, че го направих. - person markdrake; 26.11.2014