Skip to content
No description, website, or topics provided.
PHP
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config
src
.gitignore
.styleci.yml
changelog.md
composer.json
composer.lock
contributing.md
license.md
phpunit.xml
readme.md

readme.md

Laravel Middleware Annotations

Latest Version on Packagist Total Downloads Build Status

Documantation

Installation

Via Composer

$ composer require m3assy/laravelannotation

If you are developing your application using Laravel 5.5+, the service providers and facades are registered automatically. If you are using lower versions add those lines to config/app.php

'providers' => [
    // Service Providers
    M3assy\LaravelAnnotations\LaravelAnnotationServiceProvider::class,
],
'aliases' => [
    // Facade Aliases
    'Annotation' => M3assy\LaravelAnnotations\Facades\Annotation::class,
],

Usage

First of all you have to use trait in your base controller or the controller that you need to activate this feature in it

<?php
    use M3assy\LaravelAnnotations\Foundation\Traits\HasAnnotationMiddlewares;
    class Controller extends BaseController{
        use YourTraits, HasAnnotationMiddlewares;
    }
?>

and be careful in the next times if you need to use you controller constructor again you have call parent::__construct(); and then write your logic.

Middleware annotations follows an easy syntax to use with middlewares and getting rid of the fat controller constructor.

All what you need is to name your middleware in camel case and generate the annotation file using our artisan command and add it to your controllers' doc blocks.

Example:

<?php

namespace App\Http\Controllers\Modules;

use App\Http\Controllers\Controller;

/**
 * Example For Middleware Class Annotation
 * @Auth
 */
class UserController extends Controller
{
    /**
     * Example For Middleware Method Annotation
     * @Auth
     * @ExampleAnnotationWithParameter("values") 
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return response();
    }
}

This package built-in auth middleware annotation so all what you need is to use annotation like so: If you need to apply middleware over all controller then add you doc block over controller class, and if you need to specify a controller method with middleware then you can add your annotation above the method in its DocBlock.

if you have a middleware with parameters, so you can use the annotation with parentheses and the values syntax.

Creating Middleware Annotation is pretty easy, all what you need is to call our artisan make:annotation command like so:

  $ php artisan make:annotation Guest

This will generate a file like the following:

<?php

namespace App\Foundation\Annotations;

use M3assy\LaravelAnnotations\Foundation\Types\MiddlewareAnnotation;

/**
 * @Annotation
 */
class Guest extends MiddlewareAnnotation
{

}

If you have middleware parameters that required kind of validation then you can override the following method:

<?php

namespace App\Foundation\Annotations;

use M3assy\LaravelAnnotations\Foundation\Types\MiddlewareAnnotation;

/**
 * @Annotation
 */
class Guest extends MiddlewareAnnotation
{
    /**
    * @return bool
    */
    public function validateGivenValue()
    {
        // Your Validation Logic Goes Here
    }
}

Notice: If the given value is invalid the engine will neglect this annotation.

Laratrust Integration

This package is delivered with Implementation For Laratrust ACL Annotations System.

To start using roles and permissions all what you need is to use the magic annotations in your controllers like so:

<?php

namespace App\Http\Controllers\Modules;

use App\Http\Controllers\Controller;

/**
 * @Role("superadmin")
 */
class UserController extends Controller
{
    /**
     * @Permission("list-users|create-users") 
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return response();
    }
}

Feel free to use Role and Permission annotations on the class level and methods level like previous instructions.

Scanning New Roles And Permissions

If you have used any role or permission in its annotation and it does not exist in the acl tables and you need to add them, no need to use any ui or tinker or any type code. Just use our artisan scan:acl Command and it will identify automatically what is new in your roles and permissions and detects its type and create new instance for it. To start scan fire your command like following:

  $ php artisan scan:acl

and voila!, We finished :)

If you refreshed any route to a controller contains non-existing role or permission, you will find that it is created and applied.

Future Features

  • Implement middleware options.
  • Implement Laratrust Teams Feature Annotation.
  • Adding more built-in laravel middlewares.
  • Implementing magic middleware features for developers to use.

Contributing

Please see contributing.md for details and a todolist.

Security

If you discover any security related issues, please email 3assy@diva-lab.com instead of using the issue tracker.

Credits

License

MIT. Please see the license file for more information.

You can’t perform that action at this time.