Как добавить плагин 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, но вы должны найти тот, который лучше всего вам подходит, и работать с ним!