darsyn/class-finder

此包已被废弃,不再维护。没有建议的替代包。

Darsyn 的类搜索器,用于搜索最终用户 PHP 类。

3.0.2 2018-12-16 18:46 UTC

This package is auto-updated.

Last update: 2021-03-09 12:34:32 UTC


README

一个用于在特定根目录和命名空间中搜索类的库。最初是为了在所有注册的 Symfony 扩展包中搜索类(类似于查找扩展包命令),它可以找到符合标准的类,而无需手动注册每个类。可以指定各种过滤器,例如

  • 在子目录/命名空间中。
  • 具有特定的文件扩展名。
  • 以自定义后缀结尾。
  • 实现或扩展父类或接口。

通常返回一个包含完全限定类名(作为字符串)的数组,但通过将 true 作为 findClasses() 方法的第四个参数传递,将返回 ReflectionClass 实例的数组。在某些情况下非常有用。

许可证

本项目采用 MIT 许可。

依赖项

本项目使用 Symfony 的 Finder 组件搜索类,并使用 PHP 的 Reflection 扩展 处理类定义。它还假设您正在使用 Composer 或类似的自动加载器。

如果您计划使用此库与 Symfony 框架一起使用,它还利用了 HTTP Kernel 组件;但是这已经是您项目的依赖项。

示例

<?php

use Darsyn\ClassFinder\ClassFinder;

$finder = new ClassFinder;
$finder->setRootDirectory(__DIR__);

$subDir = 'Models';
$suffix = 'Entity';
$parent = 'Framework\\ActiveRecordEntity';

$classes = $finder->findClasses($subDir, $suffix, $parent);
foreach ($classes as $class) {
	echo $class . "\n";
}

/**
 * Example Output:
 *
 * Models\UserEntity
 * Models\GroupEntity
 * Models\CustomerEntity
 */

Symfony 集成

<?php

use Darsyn\ClassFinder\BundleClassFinder;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DefaultController extends Controller
{
	public function indexAction()
	{
		$kernel = $this->container->get('kernel');
		$finder = new BundleClassFinder($kernel);
		// Find all container-aware commands across all bundles:
		$containerAwareCommands = $finder->findClasses(
			'Command',
			'Command',
			'Symfony\\Bundle\\FrameworkBundle\\Command\\ContainerAwareCommand'
		);
	}
}

您还可以将此库注册为服务。要做到这一点,请将以下内容添加到 app/config/services.yml(或在使用此库的束中,使用您首选的配置格式)

services:

    darsyn.class_finder:
        class: Darsyn\ClassFinder\BundleClassFinder
        arguments: [ @kernel ]

注意:请记住,kernel 服务是合成的,必须在 Symfony 将正确的内核实例注入容器之前才能使用。

作者和贡献

当前作者包括

欢迎所有贡献,别忘了在拉取请求中添加您的名字!