该包最新版本(dev-master)的许可证信息不可用。

dev-master 2015-04-21 11:41 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:00:54 UTC


README

#Commode: Filters

Build Status Code Climate Coverage Status

_laravel-commode/filters 是一个 laravel 4.2 过滤层助手,允许您将路由过滤器组织到类中。


####内容

##安装

您可以使用 composer 安装 laravel-commode/common

"require": {
    "laravel-commode/filters": "dev-master"
}

要启用包,您需要注册 LaravelCommode\Filters\FiltersServiceProvider 服务提供者

    <?php
        // ./yourLaravelApplication/app/config/app.php
        return [
            // ... config code
            'providers' => [
                // ... providers
                'LaravelCommode\Filters\FiltersServiceProvider'
            ]
        ];

##创建过滤器组

要创建一个过滤器组,您需要创建一个 FilterGroupClass,它必须扩展自 LaravelCommode\Filters\Groups\AbstractFilterGroup。每个 FilterGroupClass 都需要实现 getPrefix() 方法,该方法将返回要注册为过滤器的方法的通用前缀。例如,假设我们需要一个 ACL 过滤器组,它可以检查用户是否是访客以及当前授权用户是否有权限执行操作。我们将创建一个 ACLFilters 类,该类扩展自 LaravelCommode\Filters\Groups\AbstractFilterGroup 并实现 getPrefix() 方法,返回 'auth' 值,因为我们需要的过滤器名称都以前缀字符串开头

    <?php
        namespace Application\Http\Filters;
        
        use LaravelCommode\Filters\Groups\AbstractFilterGroup;
        use Illuminate\Auth\Guard;
        use Illuminate\Foundation\Application;
        
        class ACLFilters extends AbstractFilterGroup
        {
            /**
            * @var \Illuminate\Auth\Guard 
            **/
            private $authGuard;
            
            /**
            * All constructors are passed into DI-container.
            *
            * But, since \Illuminate\Auth\Guard is registered as shared 
            * view name auth, it can not be injected directly, so in 
            * this example I will use Application injection
            **/
            public function __construct(Application $application)
            {
                $this->authGuard = $application->make('auth'); // grab auth guard from DI 
            }
            
            /**
            * Guest filter
            **/
            public function authGuest()
            {
                if ($this->authGuard->guest()) {
                    return \Redirect::to('security/signin');
                }
            }
            
            /**
            * Dashboard filter
            **/
            public function authDashboard()
            {
                if ($this->authGuest() && !$this->authGuard->user()->hasPermission('dashboard')) {
                    return \Redirect::to('security/signin');
                }
            }
            
            public function getPrefix()
            {
                return 'auth';
            }
        }

##过滤器注册

过滤器注册是一个帮助您在 Laravel 环境中注册您的过滤器组的类。您可以通过 FilterRegistry 门面、Laravel 的 IoC 作为 'common.filters' 或通过将 LaravelCommode\Filters\Interfaces\IFilterRegistry 传递给它来访问它。

要注册您的过滤器组,您需要将它的类名传递给 FilterRegistry::extract($classname) 方法,或者如果您想注册多个过滤器组,您需要使用 FilterRegistry::extractArray(array $classnames = []);如果您自己构建了过滤器组,您可以将其实例传递给 FilterRegistry::add(\LaravelCommode\Filters\Interfaces\IFilterGroup $filterGroup)

    <?php
        FilterRegistry::extract('Application\Http\Filters\ACLFilters');
        FilterRegistry::extractArray([Application\Http\Filters\ACLFilters::class]); // php 5.5 style
        FilterRegistry::add(new Application\Http\Filters\ACLFilters(app()))