c33s / propel-di-behavior-bundle
该包已被弃用且不再维护。没有建议替代包。
为您的Propel模型提供干净的Symfony2依赖注入
v0.1.1
2015-05-08 15:35 UTC
Requires
- php: >=5.4.0
- glorpen/propel-bundle: ~1.2.0
- propel/propel-bundle: ~1.2
This package is not auto-updated.
Last update: 2022-02-01 12:47:02 UTC
README
为您的Propel模型提供干净的Symfony2依赖注入
安装
此包依赖于 GlorpenPropelBundle
。请先安装它。
在您的 composer.json
文件中需要 c33s/propel-di-behavior-bundle
{ "require": { "c33s/propel-di-behavior-bundle": "@stable", } }
将propel行为添加到您的propel配置中
# app/config/config.yml propel: # ... behaviors: c33s_di: vendor.c33s.propel-di-behavior-bundle.src.C33sPropelDependencyCollectorBehavior # Optional: add another "instance" for global usage that does not interfere with model-specific behavior instances c33s_di_global: vendor.c33s.propel-di-behavior-bundle.src.C33sPropelDependencyCollectorBehavior
在 app/AppKernel.php
中注册此包
// app/AppKernel.php public function registerBundles() { return array( // ... new C33s\PropelDIBehaviorBundle\C33sPropelDIBehaviorBundle(), ); }
用法
将行为添加到您的propel模型中 - 全局(使用 c33s_di_global
名称)或特定模型。您可以将Symfony2服务或参数注入任何 Model
或 Query
类。每个定义由要注入的服务或参数名称(参数用%字符包围)组成,后面跟可选的getter方法和该方法的类型提示,用冒号分隔
logger:getLogger:\Psr\Log\LoggerInterface
注入Symfony2日志服务,通过$model->getLogger()
(或$query->getLogger()
)使其可访问,并为getter提供\Psr\Log\LoggerInterface
类型提示logger
注入没有明确getter的Symfony2日志服务。使用$model->getInjectedDependency('logger')
来访问它。%locale%:getLocale:string
注入locale
参数,提供访问它的getLocale()
方法。
示例模式
<!-- my/Bundle/Resources/config/schema.xml --> <!-- this will inject the logger into ALL Propel model and query instances --> <behavior name="c33s_di_global"> <parameter name="model" value="logger:getLogger:\Psr\Log\LoggerInterface" /> <parameter name="query" value="logger:getLogger:\Psr\Log\LoggerInterface" /> </behavior> <table name="book"> <!-- this will inject the mailer and session into the Book instances and request_stack into BookQuery instances --> <behavior name="c33s_di"> <parameter name="model" value=" mailer:getMailer:\Swift_Mailer, session:getSession:\Symfony\Component\HttpFoundation\Session\Session, " /> <parameter name="query" value="request_stack:getRequestStack:\Symfony\Component\HttpFoundation\RequestStack" /> </behavior> <...> </table>
它如何工作
C33sPropelDIBehaviorBundle
为 model.create
和 query.create
注册事件监听器,这些事件由 GlorpenPropelBundle
处理。在每次模型或查询创建时,将注入每个服务的匿名回调函数到类中,确保只能访问在模式中指定的服务。回调函数还确保不会实例化未实际使用的任何服务。
到目前为止,这是我在不干涉整个DI容器的情况下将特定的Symfony2依赖注入到Propel模型中的最干净的方法。