Содержание


Plugin


Zend\Cache\Storage\Plugin, ЗФ2, Zend Framework 2, ZF2





Обзор

Для добавления недостающего функционала или изменения поведения адаптера хранилища используются плагины.

Плагины прослушивают события, вызываемые адаптерами и могут изменять аргументы вызываемых методов (*.post - events), пропускать  непосредственно возвращать результат (используя stopPropagation), изменять результат (используя метод setResult класса  Zend\Cache\Storage\PostEvent), а такк же ловить исключения (используя Zend\Cache\Storage\ExceptionEvent).

 


Быстрый старт

Плагины хранилищ могут быть легко созданы с помощью класса ZendCacheStorageFactory используя pluginFactory, или просто инициализированы одним из классов Zend\Cache\Storage\Plugin\*.

use Zend\Cache\StorageFactory;
 
// Via factory:
$cache = StorageFactory::factory(array(
    'adapter' => 'filesystem',
    'plugins' => array('serializer'),
));
 
// Alternately:
$cache  = StorageFactory::adapterFactory('filesystem');
$plugin = StorageFactory::pluginFactory('serializer');
$cache->addPlugin($plugin);
 
// Or manually:
$cache  = new ZendCacheStorageAdapterFilesystem();
$plugin = new ZendCacheStoragePluginSerializer();
$cache->addPlugin($plugin);


Плагин ClearExpiredByFactor

Zend\Cache\Storage\Adapter\ClearExpiredByFactorвызывает метод хранилища clearExpired() случайным образом (по фактору) после каждого вызова setItem(), setItems(), addItem() и addItems().

Опцииплагина:

clearing_factor         integer           0   Фактор автоматической очистки

Важно:Требуется ClearExpiredInterface.

Хранилища должны реализовать Zend\Cache\Storage\ClearExpiredInterface для работы с этим плагином.

Плагин ExceptionHandler

Zend\Cache\Storage\Adapter\ExceptionHandler перехватывает все исключения, выбрасываемые при чтении или записи кэша и посылает их в calback функцию.

Можно настроить, должен ли планин повторно вызывать перехваченное исключение.

Опции плагина:

exception_callbackCallback/null            null     Callback функция будет вызвана, а перехвачное исключение юудет доступно как аргумент этой функции.

throw_exceptions    boolean         true     Повторно вызвать перехваченное исключение

 


Плагин IgnoreUserAbort

Zend\Cache\Storage\Adapter\IgnoreUserAbortигнорирует скрипты, вызванные пользователем, пока не закончится процесс записи кэша.

Опции плагина:

exit_on_abort           boolean |true     Прекратить выполнение скрипта, если пользователь отменил скрипт.

 

Плагин OptimizeByFactor

Zend\Cache\Storage\Adapter\OptimizeByFactorвыхывает метод хранилища optimize()случайным образом (по фактору) после удаления элементов из кэша.

Опции плагина:

optimizing_factor     integer           0          Фактор автоматической оптимизации

Важно: Требуется OptimizableInterface

Хранилища должны реализовать Zend\Cache\Storage\OptimizableInterface для работы с этим плагином.

 


Плагин Serializer

Zend\Cache\Storage\Adapter\Serializer серализует данные при записи в кэш, и десериализует при чтении. Таким образом можно хранить различные типы данных в хранилище, поддерживая только тип данных «строка»( string).

Опции плагина:

serializer       null/string/ZendSerializerAdapterAdapterInterface  null  использоватьсериализацию.

- Если передан «null» используется сериализатор по-умолчанию.

- Если  передано «string»            , то нужно использовать еще и опцию «serializer_options»

serializer_options    array   []    Массив с опциями для сериализатора для создания эземпляра сериализатора.

 

Доступные методы

setOptions(ZendCacheStoragePluginPluginOptions $options)

Задать опции.

Типвозвращаемыхданных: Zend\Cache\Storage\Plugin\PluginInterface

 

getOptions()

Получить опции.

Типвозвращаемыхданных: Zend\Cache\Storage\Plugin\PluginOptions

 

attach(ZendEventManagerEventManagerInterface $events)

Определяется Zend\EventManager\ListenerAggregateInterface. Задаетслушателей.

Типвозвращаемыхданных:void

 

detach(ZendEventManagerEventManagerInterface $events)

Определяется Zend\EventManager\ListenerAggregateInterface. Отсоединяет все ранее присоединенные слушатели.

Тип возвращаемых данных:void

 

 



Примеры

Основы написания своего плагина для  хранилища.

use Zend\Cache\Storage\Event;
use Zend\Cache\Storage\PluginAbstractPlugin;
use Zend\EventManager\EventManagerInterface;
 
class MyPlugin extends AbstractPlugin
{
 
    protected $handles = array();
 
    // This method have to attach all events required by this plugin
    public function attach(EventManagerInterface $events)
    {
        $this->handles[] = $events->attach('getItem.pre', array($this, 'onGetItemPre'));
        $this->handles[] = $events->attach('getItem.post', array($this, 'onGetItemPost'));
        return $this;
    }
 
    // This method have to attach all events required by this plugin
    public function detach(EventManagerInterface $events)
    {
        foreach ($this->handles as $handle) {
           $events->detach($handle);
        }
        $this->handles = array();
        return $this;
    }
 
    public function onGetItemPre(Event $event)
    {
        $params = $event->getParams();
        echo sprintf("Method 'getItem' with key '%s' startedn", params['key']);
    }
 
    public function onGetItemPost(Event $event)
    {
        $params = $event->getParams();
        echo sprintf("Method 'getItem' with key '%s' finishedn", params['key']);
    }
}
 
// After defining this basic plugin we can instantiate and add it to an adapter instance
$plugin = new MyPlugin();
$cache->addPlugin($plugin);
 
// Now on calling getItem our basic plugin should print the expacted output
$cache->getItem('cache-key');
// Method 'getItem' with key 'cache-key' started
// Method 'getItem' with key 'cache-key' finished

Автор статьи: DuB