lilinen/decor

Add method decorations with annotations.

dev-master 2018-11-28 12:00 UTC

This package is auto-updated.

Last update: 2024-04-28 23:28:56 UTC


README

Build Status

Add method decorations with annotations.

Installation

composer require lilinen/decor

Usage

Creating custom decorations

Create a decoration annotation:

<?php
// src/Decoration/MyDecoration.php

namespace App\Decoration;

use LiLinen\Decor\Decoration\AbstractDecoration;

/**
 * @Annotation
 * @Target("METHOD")
 */
final class MyDecoration extends AbstractDecoration
{
}

Create a decorator:

<?php
// src/Decorator/MyDecorator.php

namespace App\Decorator;

use App\Decoration\MyDecoration;
use LiLinen\Decor\Decorator\DecoratorInterface;
use LiLinen\Decor\Decoration\DecorationInterface;

class MyDecorator implements DecoratorInterface
{
    public function supports(string $name): bool
    {
        return $name === MyDecoration::class;
    }

    public function getBeforeFunction(DecorationInterface $decoration): ?callable
    {
        return function ($proxy, $instance, $method, $params, &$returnEarly) {
            // Add logic
        };
    }

    public function getAfterFunction(DecorationInterface $decoration): ?callable
    {
        return function ($proxy, $instance, $method, $params, $returnValue, & $returnEarly) use ($decoration) {
            // Add logic
        };
    }
}

Related Projects