psuw / proxy-factory
Event dispatching proxy factory
1.0.0
2020-09-04 12:06 UTC
Requires
- php: ^7.0
- ocramius/proxy-manager: ~1.0|~2.0
- symfony/dependency-injection: ~2.8
- symfony/event-dispatcher: ~2.8
Requires (Dev)
- phpunit/phpunit: ^6.5
This package is auto-updated.
Last update: 2024-05-04 20:25:26 UTC
README
Generates proxy for a given object dispatching pre and post execute events on indicated methods as a way in runtime dynamic class extending.
@package PsuwProxyFactory
@copyright Copyright (c) 2019, Paweł Suwiński
@author Paweł Suwiński <psuw@wp.pl>
@license MIT
Example of usage
Configured global Request::get()
validator:
# config.yml
imports:
- { resource: parameters.yml }
services:
# (...)
# Validate or sanitize every Request::get() call
request_validator:
class: (...)
arguments: [ '%request_validator_config%' ]
tags: [{ name: kernel.event_listener, event: request.post_get}]
# Replace every Request ParameterBag object with proxied one
request_parameter_bag_replace:
class: (...)
tags: [{ name: kernel.event_listener, event: kernel.request, priority: 140}]
# ParameterBag proxy for get() and quote() methods dispatching
# request.pre_get and request.post_get events on ParameterBag::get()
# request.pre_quote and request.post_quote on ParameterBag::quote()
request_parameter_bag_proxy:
class: Symfony\Component\HttpFoundation\ParameterBag
shared: false
factory: ['@proxy_factory', 'createProxy']
arguments: ['@parameter_bag', ['get', 'quote'], 'request']
parameter_bag:
class: Symfony\Component\HttpFoundation\ParameterBag
shared: false
proxy_factory:
class: Psuw\ProxyFactory\EventDispatchingProxyFactory
arguments: ['@event_dispatcher', '@proxy_config']
proxy_config:
class: ProxyManager\Configuration
calls:
- [setProxiesTargetDir, ['%kernel.cache_dir%']]
- [setGeneratorStrategy, ['@proxy_manager.generator_strategy']]
proxy_manager.generator_strategy:
arguments: ['@proxy_manager.file_locator']
class: ProxyManager\GeneratorStrategy\FileWriterGeneratorStrategy
proxy_manager.file_locator:
class: ProxyManager\FileLocator\FileLocator
arguments: ['%kernel.cache_dir%']