DRY zf2 Module.php

时间:2013-10-07 09:08:30

标签: zend-framework2 dry

DRY Module.php有标准方法吗?我有几个像这样的简单Module.php文件

<?php
namespace SolImporter;

class Module
{
    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                ),
            ),
        );
    }

    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }
}

只有名称空间不同,当然PHPCPD会对此抱怨。

1 个答案:

答案 0 :(得分:1)

你可以这样做。但是,您创建了另一个依赖项,而该模块并不真正需要它。而且,如果没有反思,你就无法得到你孩子的__DIR__。反射可能会损害您的性能,特别是如果您将它用于每个模块类(并且每个模块类按照其原则在每个请求中加载)。

但在这里:

namespace MyCommon\Module;

class AbstractModule
{
    public function getAutoloaderConfig()
    {
        $dir       = $this->getDir();
        $namespace = $this->getNamespace();

        return array(
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    $namespace => $dir . '/src/' . $namespace,
                ),
            ),
        );
    }

    public function getConfig()
    {
        $dir = $this->getDir();

        return include $dir . '/config/module.config.php';
    }

    protected function getDir()
    {
        $reflection = new ReflectionClass($this);
        return dirname($reflection->getFileName());
    }

    protected function getNamespace()
    {
        return str_replace('\Module', '', get_class($this));
    }
}

使用它像:

namespace MyModule;

use MyCommon\Module\AbstractModule;

class Module extends AbstractModule
{
}