Как добавить плагин Coldbox в каждый обработчик?

У нас есть несколько плагинов, которые используются в приложении Coldbox.

Есть ли способ ввести их глобально без необходимости вручную указывать свойство для каждого из них?

Я просмотрел документы в Wirebox, но не вижу ничего релевантного. (Вполне возможно, я что-то упускаю; это длинная и плотная страница.)

Казалось бы, украшение FrameworkSupertype может быть способом сделать это, но я не могу найти упоминания об этом.

1 ответ

Решение

Я укажу, что переполнение стека также требует входа и ввода темы:)

Есть несколько способов сделать это и, честно говоря, любой способ работает.

Первый - просто вызывать getPlugin("myPlugin") везде, где вы хотите его использовать, поскольку метод getPlugin() доступен в каждом обработчике, представлении и макете.

Вторым было бы использовать миксин-инъекцию и поместить следующее в верхнюю часть каждого обработчика, а затем получить доступ к плагину из области видимости переменных: property name="myPlugin" inject="coldbox:plugin:myPlugin";

В-третьих, все ваши обработчики должны расширять базовый обработчик, как предложил Джоэл, и помещать свойство DI в базовый обработчик.

Четвертый, который вы упомянули, заключается в использовании аспекта AOP и его привязке к методу init() для каждого CFC в каталоге обработчиков и установке плагина в область действия переменных в качестве рекомендации "после".

Пятый вариант - использовать перехватчик для прослушивания объявления afterHandlerCreation и вручную добавить плагин в объект oHandler.

И шестой возможностью будет использование requestStartHandler или точки перехвата preProcess и размещение ссылки на ваш плагин в частной коллекции запросов (prc), которая также будет доступна в представлениях и макетах.

Так много вариантов, и, честно говоря, это даже не все из них. Лично я бы, вероятно, использовал перехватчик afterHandlerCreation, но вы должны найти тот, который лучше всего вам подходит, и работать с ним!

Другие вопросы по тегам