softius/resources-resolver

解析文件路径和方法

dev-master / 1.0.x-dev 2016-06-10 19:35 UTC

This package is auto-updated.

Last update: 2024-09-14 04:26:31 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

安装

通过Composer

$ composer require softius/resources-resolver

用法

该库提供了以下解析器:

  • CallableResolver
  • FilenameResolver

用法:CallableResolver

可以将以下输入解析为相关的可调用项,如下所示。这同样适用于静态和非静态方法,并且高度依赖于提供容器。

  • App\GreetingController::helloAction to [instance of App\GreetingController, 'helloAction']
  • ::helloAction to [instance of calling class, 'helloAction']
  • parent::helloAction to [parent instance of calling class, 'helloAction']
  • App\SomeClass::someStaticMethod to ['App\SomeClass', 'someStaticMethod']

解析非静态方法

use League\Container\Container;
use Softius\ResourcesResolver\CallableResolver;

$container = new Container();
$container->add('App\SomeClass');

$resolver = new CallableResolver($container);

$callable = $resolver->resolve('App\SomeClass::someMethod');;

使用类别名解析方法

use League\Container\Container;
use Softius\ResourcesResolver\CallableResolver;

$container = new Container();
$container->add('FooClass', 'App\SomeClass');

$resolver = new CallableResolver($container);

$callable = $resolver->resolve('FooClass::someMethod');;

解析静态方法

use Softius\ResourcesResolver\CallableResolver;

$resolver = new CallableResolver();

$callable = $resolver->resolve('App\SomeClass::someStaticMethod');

使用父类或self解析

use Softius\ResourcesResolver\CallableResolver;

class A
{
    public function hi()
    {
        echo 'A: Hi!';
    }
}

class B extends A
{
    public function hi()
    {
        echo 'B: Hi!';
    }
    
    public function test()
    {
        $resolver = new CallableResolver();
        $callable = $resolver->resolve('::hi');         // returns [B, hi]
        $callable = $resolver->resolve('self::hi');     // returns [B, hi]
        $callable = $resolver->resolve('parent::hi');   // returns [A, hi]
    }   
}

用法:FilenameResolver

从模板目录解析文件名

define('TEMPLATES_DIR', '...');

use Softius\ResourcesResolver\FilenameResolver; 

$resolver = new FilenameResolver(TEMPLATES_DIR); 
$filename = $resolver->resolve('path/to/template.php');

也可以省略扩展名,并为所有要解析的文件指定全局扩展名,如下所示。

define('TEMPLATES_DIR', '...');

use Softius\ResourcesResolver\FilenameResolver; 

$resolver = new FilenameResolver(TEMPLATES_DIR); 
$resolver->setExtension('php');
$filename = $resolver->resolve('path/to/template');

许多框架不使用目录分隔符以在多个操作系统之间提供一致的视图。以下示例使用'.'作为目录分隔符,而不使用文件扩展名

define('TEMPLATES_DIR', '...');

use Softius\ResourcesResolver\FilenameResolver; 

$resolver = new FilenameResolver(TEMPLATES_DIR, '.');
$resolver->setExtension('php');
$filename = $resolver->resolve('path.to.template');

从包含路径解析文件名

define('TEMPLATES_DIR', '...');

use Softius\ResourcesResolver\FilenameResolver; 

$resolver = new FilenameResolver(TEMPLATES_DIR);
$resolver->useIncludePath(true);
$filename = $resolver->resolve('path/to/file.php');

测试

$ composer test

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。