net_bazzline/php_component_locator_generator

自由软件的 PHP 组件,可生成基于硬编码定位器的配置

2.0.9 2016-03-22 19:02 UTC

This package is auto-updated.

Last update: 2024-09-07 18:07:03 UTC


README

这个自由软件组件可以简化基于配置文件的定位器生成。默认情况下,它可以从数组配置文件和 propel1 schema.xml 文件中创建定位器。

它使用 php code generator component 作为代码生成的强大基础。

当前 master 分支的构建状态由 Travis CI 跟踪:Build Status Latest stable

Scrutinizer 状态如下: code quality | build status

Versioneye 状态如下: dependencies

下载量: Downloads this Month

它也可在 openhub.net 上找到。

为什么

  • 不喜欢 "serviceLocator->get('foo')" (API 不明确) 调用
  • 喜欢一些服务定位器提供的可配置方法
  • 受到一次 php 用户组 演讲 " 依赖注入的反面 " 的启发,我看到了 "我不孤单"
  • 生成的代码易于调试和理解(没有魔法)

如何

  • 特定任务配置汇编器创建一个统一的配置对象
  • 统一配置对象注入到定位器生成器中
  • 定位器生成器创建所需的文件
  • 文件存在策略可以处理现有文件的处理

安装

手动

mkdir -p vendor/net_bazzline/php_component_locator_generator
cd vendor/net_bazzline/php_component_locator_generator
git clone https://github.com/bazzline/php_component_locator_generator

通过 Packagist

composer require net_bazzline/php_component_locator_generator:dev-master

示例

数组配置文件

查看 配置文件

如何创建

cd <component root directory>
./execute_example ArrayConfiguration
ls data/
vim data/FromArrayConfigurationFileLocator.php

生成代码

<?php
/**
 * @author Net\Bazzline\Component\Locator
 * @since 2014-06-07
 */

namespace Application\Service;

use My\OtherInterface as MyInterface;
use Application\Locator\BaseLocator as BaseLocator;

/**
 * Class FromArrayConfigurationFileLocator
 *
 * @package Application\Service
 */
class FromArrayConfigurationFileLocator extends BaseLocator implements \My\Full\QualifiedInterface, MyInterface
{
    /**
     * @var $factoryInstancePool
     */
    private $factoryInstancePool = array();

    /**
     * @var $sharedInstancePool
     */
    private $sharedInstancePool = array();

    /**
     * @return \Application\Model\ExampleUniqueInvokableInstance
     */
    public function getExampleUniqueInvokableInstance()
    {
        return new \Application\Model\ExampleUniqueInvokableInstance();
    }

    /**
     * @return \Application\Factory\ExampleUniqueFactorizedInstanceFactory
     */
    public function getExampleUniqueFactorizedInstance()
    {
        return $this->fetchFromFactoryInstancePool('\Application\Factory\ExampleUniqueFactorizedInstanceFactory')->create();
    }

    /**
     * @return \Application\Model\ExampleSharedInvokableInstance
     */
    public function getExampleSharedInvokableInstance()
    {
        return $this->fetchFromSharedInstancePool('\Application\Model\ExampleSharedInvokableInstance');
    }

    /**
     * @return \Application\Factory\ExampleSharedFactorizedInstanceFactory
     */
    public function getExampleSharedFactorizedInstance()
    {
        $className = '\Application\Factory\ExampleSharedFactorizedInstanceFactory';

        if ($this->isNotInSharedInstancePool($className)) {
            $factoryClassName = '\Application\Factory\ExampleSharedFactorizedInstanceFactory';
            $factory = $this->fetchFromFactoryInstancePool($factoryClassName);

            $this->addToSharedInstancePool($className, $factory->create());
        }

        return $this->fetchFromSharedInstancePool($className);
    }
    //... code for internal methods
}

定位器负责实例池管理。

行为

  • 创建一个 FactoryInterface 文件
  • 如果给出了命名空间,将创建一个 InvalidArgumentException

术语

优点

  • 调用定位器生成器的一种方式是 "php bin/generate_locator "
  • 汇编器、方法构建器和文件存在策略是基于配置的运行时变量
  • 高度可配置
    • 每个配置文件都需要是一个简单的 PHP 数组
    • 必需的数组键是
      • 汇编器
      • 文件存在策略
    • 可选的数组键是
      • boostrap_file
    • 其余的配置基于给定的汇编器
  • 附带了两个 汇编器 实现
    • FromArrayAssembler
      • 必需的数组键
        • class_name
        • file_path
      • 可选的数组键
        • extends (可以为空)
        • implements (可以为空)
        • instances (可以为空)
          • alias
          • is_factory
          • is_shared
          • method_body_builder
        • method_prefix
        • namespace (可以为空)
        • uses (可以为空)
          • alias
    • FromPropelSchemaXmlAssembler
      • 必需的数组键
        • class_name
        • file_path
      • 可选的数组键
        • extends (可以为空)
        • implements (可以为空)
        • method_prefix
        • namespace (可以为空)
        • path_to_schema_xml
        • uses (可以为空)
    • 实现 AssemblerInterface 来编写自己的汇编器
  • 附带了两个文件存在策略
  • 附带了五个 方法体构建器 实现
    • FetchFromFactoryInstancePoolBuilder 被生成的定位器内部使用
    • FetchFromSharedInstancePoolBuilder 被生成的定位器内部使用
    • FetchFromSharedInstancePoolOrCreateByFactoryBuilder 被生成的定位器内部使用
    • NewInstanceBuilder 被生成的定位器内部使用
    • PropelQueryCreateBuilder 作为使用您自己的方法体构建器的一个示例
    • ValidatedInstanceCreationBuilder 作为如何使用方法体构建器支持的强大功能来生成自己的实例创建代码的另一个示例
    • 实现 MethodBodyBuilderInterface 来编写自己的方法体构建器
  • 使用独立的 组件 来生成 PHP 代码

API

API 可在 www.bazzline.net 获取,感谢 apigenapi 文档构建器

历史

  • 即将到来
    • @todo
        • Command
        • Configuration/Validator/*
        • Generator
        • Process/*
      • 在配置中添加 "default" 部分,用于 "is_shared" 和 "is_factory"(可能还有更多)
      • 将“verify”方法添加到配置中,如果未设置所有必填参数则抛出错误
      • 通过添加“autoloader class path”实现对使用的接口或类名称进行验证
      • 实现一个标志,将编写的Locator转换为LocatorInterface
      • 实现“FromPath”汇编器,该汇编器扫描路径,遍历路径并检索PHP类或接口
      • 将readme拆分为多个文件
      • 使用“net_bazzline/php_component_cli_environment”创建“net_bazzline_generate_locator”
      • 使用“net_bazzline/php_component_cli_environment”创建“net_bazzline_generate_locator_configuration <Array|PropelSchemaXml|PropelWithNamespaceSchemaXml> "
    • 为travis添加了php 7持续集成运行
    • 迁移到psr-4自动加载
    • 更新依赖项
  • 2.0.9 - 发布于2016年3月22日
    • 更新依赖项
  • 2.0.8 - 发布于2015年12月11日
    • 更新依赖项
  • 2.0.7 - 发布于2015年12月1日
    • 更新依赖项
  • 2.0.6 - 发布于2015年11月29日
  • 2.0.5 - 发布于2015年11月18日
    • 更新依赖项
  • 2.0.4 - 发布于2015年9月19日
    • 更新依赖项
  • 2.0.3 - 发布于2015年9月18日
    • 更新依赖项
  • 2.0.2 - 发布于2015年8月28日
    • 更新依赖项
  • 2.0.1 - 发布于2015年7月4日
    • 更新依赖项
  • 2.0.0 - 发布于2015年6月3日
    • Generator.php现在抛出“InvalidArgumentException”而不是“RuntimeException
    • Generator现在尝试创建提供的目录,如果它不存在
    • 修复 问题/2
    • 修复 问题/4
    • 修复 问题/5
    • 实现php_component_cli_arguments的使用
    • 实现php_component_command的使用
    • 将“bin/generalte_locator”重命名为“bin/net_bazzline_generate_locator”
  • 1.5.1 - 发布于2015年5月27日
    • 修复composer.json中“bin”的损坏条目
  • 1.5.0 - 发布于2015年5月27日
    • 将“bin/generateLocator.php”重命名为“bin/generate_locator”
    • 将“example/[..]/run.php”重命名为“example/[...]/run”
    • 修复 问题 3
  • 1.4.2 - 发布于2015年5月22日
    • 更新依赖项
  • 1.4.1 - 发布于2015年2月8日
    • 移除了对apigen的依赖
  • 1.4.0 - 发布于2015年2月7日
    • 实现了“LocatorGeneratorInterface”的生成
    • 通过添加命令“execute_example”简化示例的使用
    • 添加了“method_name_without_namespace”的示例
    • 更新了API
    • 更新依赖项
  • 1.3.1 - 发布于 2015年2月7日
    • 简化示例用法(在目录中添加“run.php”)
    • 更新了API
    • 更新依赖项
  • 1.3.0 - 发布于 2014年12月22日
    • 在 "FromPropelSchemaXmlAssembler" 中实现了 "method_name_without_namespace" 选项("createMyTable" 代替 "createMyNamespaceMyTable")
  • 1.2.1 - 发布于 2014年12月21日
    • 更新了API
    • 重构了 Command
    • 重构了 FromArrayAssembler
    • 重构了 FromPropelSchemaXmlAssembler
  • 1.2.0 - 发布于 2014年12月20日
    • 修复了 FromPropelSchemaXmlAssembler 中 propel 命名空间的错误
    • 重构了 FromPropelSchemaXmlAssembler
    • 扩展了使用输出
  • 1.1.0 - 发布于 2014年9月13日
    • 增强了 Command
      • 现在支持绝对配置路径
    • 修复了(愚蠢的)损坏的 unittest
    • 修复了 Command 中的错误
      • 检查配置中 "bootstrap_file" 是否存在没有很好地实现
    • 更新依赖项
  • 1.0.1 - 发布于 2014年9月3日
    • 添加了 api
    • 修复了损坏的链接
    • 调整了 composer.json 项目名称
    • 将命令逻辑移动到简单的 Command 类中
    • 在 "generateLocator.php" 中添加了检查,以验证是否作为 composer 组件安装
  • 1.0.0 - 发布于 2014年8月31日
    • 项目初始启动
    • 单元测试
    • 示例
    • 代码库本身
    • API 描述