Zend framework2 正确引导Zend2插件的方法是什么?
目前我正在编写这样的插件:Zend framework2 正确引导Zend2插件的方法是什么?,zend-framework2,Zend Framework2,目前我正在编写这样的插件: namespace Lawyers\Controller\Plugin; use Zend\Mvc\Controller\Plugin\AbstractPlugin, Braintree as BraintreeSDK; class Braintree extends AbstractPlugin { protected $__initialized = false; protected $__pm; protected $__e
namespace Lawyers\Controller\Plugin;
use Zend\Mvc\Controller\Plugin\AbstractPlugin,
Braintree as BraintreeSDK;
class Braintree extends AbstractPlugin
{
protected $__initialized = false;
protected $__pm;
protected $__em;
/**
* Set Braintree config settings
*
* @return void
*/
protected function init() {
if($this->__initialized) {
return;
}
$this->__pm = $this->getController()->getEntityRepository();
$this->__pm = $this->__pm['ExternalPayment'];
$this->__em = $this->getController()->getEntityManager();
$config = $this->getController()->getServiceLocator()->get('Config');
\Braintree_Configuration::environment($config['braintree']['env']);
\Braintree_Configuration::merchantId($config['braintree']['merchant_id']);
\Braintree_Configuration::publicKey($config['braintree']['public_key']);
\Braintree_Configuration::privateKey($config['braintree']['private_key']);
$this->__initialized = true;
}
/**
* Create new entity for transaction
*
* @return \Lawyers\Model\Entity\ExternalPayment
*/
protected function spawn() {
return new \Lawyers\Model\Entity\ExternalPayment();
}
/**
* New sales transaction
*
* @param mixed $Payer - person who pays this transaction
* @param mixed $Source - source of payment: Lawyers\Model\Entity\Questions or Lawyers\Model\Entity\Lead
* @param array $transaction - payment details:
* 'amount' => '1000.00',
* 'creditCard' => array(
* 'number' => '5105105105105100',
* 'expirationDate' => '05/12'
* )
* @return mixed - transaction id or null
*/
public function sell($Payer, $Source, $transaction) {
$this->init();
$data = array(
'status' => 'pending',
'amount' => $transaction['amount'],
);
# ....
}
}
不在每次调用中使用
$this->init()
初始化插件实例变量的正确方法是什么?我没有看到用于插件的类似构造函数的方法:(您可以通过向插件管理器添加初始值设定项来实现这一点
首先让您的插件实现Zend\Stdlib\InitializableInterface
(您还需要将init方法公开)
然后在模块引导中添加初始值设定项
<?php
namespace Lawyers;
use Zend\Stdlib\InitializableInterface;
class Module
{
public function onBootstrap(MvcEvent $e)
$sm = $e->getApplication()->getServiceManager();
$plugins = $sm->get('ControllerPluginManager');
$plugins->addInitializer(function($plugin, $pm) {
if ($plugin instanceof InitializableInterface) {
$plugin->init();
}
}, false); // false tells the manager not to add to top of stack
}
}
Hmmm\uuuu-construct()
或者可能\uuu-invoke()
?\uuuu-construct()
将使插件逻辑崩溃,将尝试\uu-invoke()
<?php
namespace Lawyers;
use Zend\Stdlib\InitializableInterface;
class Module
{
public function onBootstrap(MvcEvent $e)
$sm = $e->getApplication()->getServiceManager();
$plugins = $sm->get('ControllerPluginManager');
$plugins->addInitializer(function($plugin, $pm) {
if ($plugin instanceof InitializableInterface) {
$plugin->init();
}
}, false); // false tells the manager not to add to top of stack
}
}