All Projects → DeGraciaMathieu → Manager

DeGraciaMathieu / Manager

Implementation of the Manager pattern existing in Laravel framework

Projects that are alternatives of or similar to Manager

Laravel Tabler
Laravel Package for integrating Tabler template and this package is Laravel Mix friendly.
Stars: ✭ 20 (-72.97%)
Mutual labels:  laravel, package
Laravel Reviewable
Adds a reviewable feature to your laravel app.
Stars: ✭ 57 (-22.97%)
Mutual labels:  laravel, package
Htmlcache
Laravel middleware to cache the rendered html
Stars: ✭ 35 (-52.7%)
Mutual labels:  laravel, package
Pagarme Laravel
Pagar.me SDK for Laravel applications.
Stars: ✭ 23 (-68.92%)
Mutual labels:  laravel, package
Laravel Mentions
End-to-end mentions in Laravel 5.
Stars: ✭ 68 (-8.11%)
Mutual labels:  laravel, package
Laravel Aws Sns
Laravel package for the AWS SNS Events
Stars: ✭ 24 (-67.57%)
Mutual labels:  laravel, package
Laravel Packager
A cli tool for creating Laravel packages
Stars: ✭ 1,049 (+1317.57%)
Mutual labels:  laravel, package
Laravel Caffeine
Keeping Your Laravel Forms Awake.
Stars: ✭ 723 (+877.03%)
Mutual labels:  laravel, package
Watchable
Enable users to watch various models in your application.
Stars: ✭ 65 (-12.16%)
Mutual labels:  laravel, package
Laravel Packme
A CLI starter pack for developing a package with Laravel 5
Stars: ✭ 64 (-13.51%)
Mutual labels:  laravel, package
Laravel Bootstrap Table List
Bootstrap table list generator for Laravel.
Stars: ✭ 16 (-78.38%)
Mutual labels:  laravel, package
Laravel Ownership
Laravel Ownership simplify management of Eloquent model's owner.
Stars: ✭ 71 (-4.05%)
Mutual labels:  laravel, package
Aetherupload Laravel
A Laravel package to upload large files 上传大文件的Laravel扩展包
Stars: ✭ 835 (+1028.38%)
Mutual labels:  laravel, package
Laravel Mention
a laravel user mentioned package
Stars: ✭ 12 (-83.78%)
Mutual labels:  laravel, package
Package Skeleton
📦 My base for PHP packages.
Stars: ✭ 6 (-91.89%)
Mutual labels:  laravel, package
Laravel Dropbox Driver
A storage extension for Dropbox.
Stars: ✭ 42 (-43.24%)
Mutual labels:  laravel, package
Sleepingowladmin
🦉 Administrative interface builder for Laravel (Laravel admin)
Stars: ✭ 671 (+806.76%)
Mutual labels:  laravel, package
Artisan View
👀 Manage your views in Laravel projects through artisan
Stars: ✭ 708 (+856.76%)
Mutual labels:  laravel, package
Shield
The core shield package.
Stars: ✭ 60 (-18.92%)
Mutual labels:  laravel, package
Picasso
Laravel Image Management and Optimization Package
Stars: ✭ 70 (-5.41%)
Mutual labels:  laravel, package

Build Status Code Coverage PHP range Latest Version on Packagist

DeGraciaMathieu/Manager

Implementation of the Manager pattern existing in Laravel framework.

Installation

composer require degraciamathieu/manager

Usage

This package offers an abstract class Manager which needs to be extended to implement the creation of various Driver classes.

<?php

use DeGraciaMathieu/Manager/Manager;

class LoggerManager extends Manager {

    public function createMonologDriver(): LoggerDriver
    {
        return new MonologDriver();
    }

    public function createMockDriver(): LoggerDriver
    {
        return new MockDriver();
    }

    public function getDefaultDriver()
    {
        return 'monolog';
    }
}

The getDefaultDriver method should also be implemented in your class Manager, in order to determine which driver has to be created by default. It's also the right spot to determine the default driver from an environment variable, or a configuration.

<?php

public function getDefaultDriver()
{
    return env('MANAGER_LOGGER_DEFAULT_DRIVER');
}

In a matter of consistency, all Driver creations (createClientDriver, createMockDriver...) should return a class which itself implements the same interface, the LoggerDriver contract in this here case.

<?php

interface LoggerDriver {
    public function doAnything();
}

class MonologDriver implements LoggerDriver {

    public function doAnything()
    {
        echo 'i do anything from the monolog driver';
    }
}

class MockDriver implements LoggerDriver {

    public function doAnything()
    {
        echo 'i do anything from the mock driver';
    }
}

From now on, it's possible to use your Manager, either by using the default driver:

<?php

(new LoggerManager())->doAnything(); // i do anything from the monolog driver

Or by simply specify the driver which needs to be instantiated.

<?php

(new LoggerManager())->driver('monolog')->doAnything(); // i do anything from the monolog driver
(new LoggerManager())->driver('mock')->doAnything(); // i do anything from the mock driver

Work with singleton

You can also cache the creation of Drivers with the $singleton property

<?php

use DeGraciaMathieu/Manager/Manager;

class LoggerManager extends Manager {

    /**
     * @var boolean
     */
    protected $singleton = true;

    public function createMonologDriver(): LoggerDriver
    {
        return new MonologDriver();
    }    
}

With the singleton property you will only create one instance of MonologDriver

<?php

$loggerManager = new LoggerManager();

$loggerManager->driver('monolog')->doAnything();
$loggerManager->driver('monolog')->doAnything();
$loggerManager->driver('monolog')->doAnything();

Example with Laravel

Usage example of the pattern manager in a Laravel project.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].