此包的最新版本(0.1)没有可用的许可证信息。

0.1 2015-06-15 21:11 UTC

This package is not auto-updated.

Last update: 2024-09-18 09:21:35 UTC


README

#Commode: 解析器

Build Status Code Climate Coverage Status

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

##别名引用表