Giter VIP home page Giter VIP logo

proxy-factory's Introduction

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 <[email protected]>  
@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%']

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.