laravel-commode / resolver
此包的最新版本(0.1)没有可用的许可证信息。
0.1
2015-06-15 21:11 UTC
Requires
- php: >=5.5.0
- illuminate/support: 5.1.*
Requires (Dev)
- satooshi/php-coveralls: dev-master
This package is not auto-updated.
Last update: 2024-09-18 09:21:35 UTC
README
#Commode: 解析器
laravel-commode/resolver 是一个用于 laravel-commode 包环境或用于 laravel 5.1 独立环境的 [方法|闭包] 解析器类/服务。
####内容
##安装
您可以使用 composer 安装 laravel-commode/resolver。
"require": { "laravel-commode/resolver": "dev-master" }
要启用包,您需要在您的 app.php
配置文件中注册 LaravelCommode\Resolver\ResolverServiceProvider
服务提供者。
<?php // apppath/config/app.php return [ // config code... 'providers' => [ // your app providers... , LaravelCommode\Resolver\ResolverServiceProvider::class ] ];
##使用
解析器是一个小巧但有用的类,用于构建灵活的内容或需要解析的内容。它通过 CommodeResolver
门面提供,或者如果您不喜欢门面,您可以在 IoC 容器中通过别名 "laravel-commode.resolver" 或以 new \LaravelCommode\Resolver\Resolver($laravelApplicationInstance)
的形式初始化新实例找到它。
例如,假设您有一些安全模块的结构,例如 ISecurityUser,并且它与您的配置 eloquent 身份验证模型绑定。
<?php namespace App\System\Security\Abstractions; interface ISecurityUser { public function hasPermission($permission); public function hasPermissions(array $permissions); }
<?php namespace App\DAL\Concrete\Eloquent\Models; use Illuminate\Database\Eloquent\Model; class Account extends Model implements ISecurityUser { /* your eloquent model code */ }
<?php namespace App\ServiceProviders; use LaravelCommode\SilentService\SilentService; use MyApp\System\Security\Abstractions\ISecurityUser; class ACLServiceProvider extends SilentService { public function launching() {} public function registering() { $this->app->bind(ISecurityUser::class, function ($app) { return app('auth')->user(); // note that returned value might be null }); } }
CommodeResolver
可以解析闭包和类方法或将它们转换为可解析的闭包。以下是如何使用它的示例。
###解析器和闭包
<?php use App\System\Security\Abstractions\ISecurityUser; $closureThatNeedsToBeResolved = function ($knownParameter1, $knownParameterN, ISecurityUser $needsToBeResolved = null) { return func_get_args(); }; $resolver = new \LaravelCommode\Resolver\Resolver(); // or app('laravel-commode.resolver'); $knownParameter1 = 'Known'; $knownParameter2 = 'Parameter'; /** * Resolving closure and running it **/ $result = $resolver->closure($closureThatNeedsToBeResolved, [$knownParameter1, $knownParameter2]); $resultClosure = $resolver->makeClosure($closureThatNeedsToBeResolved); var_dump( $result, $resultClosure($knownParameter1, $knownParameter2), $result === $resultClosure($knownParameter1, $knownParameter2) ); // outputs // array (size=3) // 0 => string 'Known' (length=5) // 1 => string 'Parameter' (length=9) // 2 => object(MyApp\DAL\Concrete\Eloquent\Models\Account) // array (size=3) // 0 => string 'Known' (length=5) // 1 => string 'Parameter' (length=9) // 2 => object(MyApp\DAL\Concrete\Eloquent\Models\Account) // boolean true
###解析器和类方法
<?php use App\System\Security\Abstractions\ISecurityUser; class SomeClass { public function methodThatNeedsToBeResolved($knownParameter1, $knownParameterN, ISecurityUser $needsToBeResolved = null) { return func_get_args(); } } $resolver = new \LaravelCommode\Resolver\Resolver(); // or app('laravel-commode.resolver'); $someClass = new SomeClass(); $knownParameter1 = 'Known'; $knownParameter2 = 'Parameter'; $result = $resolver->method($someClass, 'methodThatNeedsToBeResolved', [$knownParameter1, $knownParameter2]); // or ->method(SomeClass::class, ..., ...) for calling static method or resolving class through // app IOC $resultClosure = $resolver->methodToClosure($someClass, 'methodThatNeedsToBeResolved'); // or ->method(SomeClass::class, ..., ...) for calling static method or resolving class through // app IOC var_dump( $result, $resultClosure($knownParameter1, $knownParameter2), $result === $resultClosure($knownParameter1, $knownParameter2) ); // outputs // array (size=3) // 0 => string 'Known' (length=5) // 1 => string 'Parameter' (length=9) // 2 => object(MyApp\DAL\Concrete\Eloquent\Models\Account) // array (size=3) // 0 => string 'Known' (length=5) // 1 => string 'Parameter' (length=9) // 2 => object(MyApp\DAL\Concrete\Eloquent\Models\Account) // boolean true
##别名引用表