laravel-commode / filters
Requires
- php: >=5.4.0
- illuminate/routing: 4.2.*
- illuminate/support: 4.2.*
- laravel-commode/common: dev-master
Requires (Dev)
- satooshi/php-coveralls: dev-master
This package is not auto-updated.
Last update: 2024-09-14 17:00:54 UTC
README
#Commode: Filters
_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()))