Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend Framework 2 getControllerConfig vs getConfig_Php_Zend Framework2 - Fatal编程技术网

Php Zend Framework 2 getControllerConfig vs getConfig

Php Zend Framework 2 getControllerConfig vs getConfig,php,zend-framework2,Php,Zend Framework2,我在这里听这个演讲: 在44:00Module.php::getConfig()vsModule.php::getControllerConfig() 查看一个示例模块,如zf校园zf apigility adminmodule 我看到config/module.config.php和module.php::getControllerConfig()定义控制器工厂 zf-apigility/config/module.config.php 'controllers' => array(

我在这里听这个演讲:

在44:00
Module.php::getConfig()
vs
Module.php::getControllerConfig()

查看一个示例模块,如zf校园
zf apigility admin
module

我看到
config/module.config.php
module.php::getControllerConfig()
定义控制器工厂

zf-apigility/config/module.config.php

'controllers' => array(
    'aliases' => array(
        'ZF\Apigility\Admin\Controller\HttpBasicAuthentication' => 'ZF\Apigility\Admin\Controller\Authentication',
        'ZF\Apigility\Admin\Controller\HttpDigestAuthentication' => 'ZF\Apigility\Admin\Controller\Authentication',
        'ZF\Apigility\Admin\Controller\OAuth2Authentication' => 'ZF\Apigility\Admin\Controller\Authentication',
    ),
    'invokables' => array(
        'ZF\Apigility\Admin\Controller\App' => 'ZF\Apigility\Admin\Controller\AppController',
        'ZF\Apigility\Admin\Controller\CacheEnabled' => 'ZF\Apigility\Admin\Controller\CacheEnabledController',
        'ZF\Apigility\Admin\Controller\FsPermissions' => 'ZF\Apigility\Admin\Controller\FsPermissionsController',
    ),
    'factories' => array(
        'ZF\Apigility\Admin\Controller\Documentation' => 'ZF\Apigility\Admin\Controller\DocumentationControllerFactory',
        'ZF\Apigility\Admin\Controller\Filters' => 'ZF\Apigility\Admin\Controller\FiltersControllerFactory',
        'ZF\Apigility\Admin\Controller\Hydrators' => 'ZF\Apigility\Admin\Controller\HydratorsControllerFactory',
        'ZF\Apigility\Admin\Controller\Validators' => 'ZF\Apigility\Admin\Controller\ValidatorsControllerFactory',
        'ZF\Apigility\Admin\Controller\InputFilter' => 'ZF\Apigility\Admin\Controller\InputFilterControllerFactory',
    ),
),
 public function getControllerConfig()
    {
        return array('factories' => array(
            'ZF\Apigility\Admin\Controller\Authentication' => function ($controllers) {
                $services = $controllers->getServiceLocator();
                $model    = $services->get('ZF\Apigility\Admin\Model\AuthenticationModel');
                return new Controller\AuthenticationController($model);
            },
            'ZF\Apigility\Admin\Controller\Authorization' => function ($controllers) {
                $services = $controllers->getServiceLocator();
                $factory  = $services->get('ZF\Apigility\Admin\Model\AuthorizationModelFactory');
                return new Controller\AuthorizationController($factory);
            },
            'ZF\Apigility\Admin\Controller\Config' => function ($controllers) {
                $services = $controllers->getServiceLocator();
                return new Controller\ConfigController($services->get('ZF\Configuration\ConfigResource'));
            },
            'ZF\Apigility\Admin\Controller\ModuleConfig' => function ($controllers) {
                $services = $controllers->getServiceLocator();
                return new Controller\ModuleConfigController($services->get('ZF\Configuration\ConfigResourceFactory'));
            },
            'ZF\Apigility\Admin\Controller\ModuleCreation' => function ($controllers) {
                $services = $controllers->getServiceLocator();
                $model    = $services->get('ZF\Apigility\Admin\Model\ModuleModel');
                return new Controller\ModuleCreationController($model);
            },
            'ZF\Apigility\Admin\Controller\Source' => function ($controllers) {
                $services = $controllers->getServiceLocator();
                $model    = $services->get('ZF\Apigility\Admin\Model\ModuleModel');
                return new Controller\SourceController($model);
            },
            'ZF\Apigility\Admin\Controller\Versioning' => function ($controllers) {
                $services = $controllers->getServiceLocator();
                $factory  = $services->get('ZF\Apigility\Admin\Model\VersioningModelFactory');
                return new Controller\VersioningController($factory);
            },
        ));
    }
zf-apigility/Module.php

'controllers' => array(
    'aliases' => array(
        'ZF\Apigility\Admin\Controller\HttpBasicAuthentication' => 'ZF\Apigility\Admin\Controller\Authentication',
        'ZF\Apigility\Admin\Controller\HttpDigestAuthentication' => 'ZF\Apigility\Admin\Controller\Authentication',
        'ZF\Apigility\Admin\Controller\OAuth2Authentication' => 'ZF\Apigility\Admin\Controller\Authentication',
    ),
    'invokables' => array(
        'ZF\Apigility\Admin\Controller\App' => 'ZF\Apigility\Admin\Controller\AppController',
        'ZF\Apigility\Admin\Controller\CacheEnabled' => 'ZF\Apigility\Admin\Controller\CacheEnabledController',
        'ZF\Apigility\Admin\Controller\FsPermissions' => 'ZF\Apigility\Admin\Controller\FsPermissionsController',
    ),
    'factories' => array(
        'ZF\Apigility\Admin\Controller\Documentation' => 'ZF\Apigility\Admin\Controller\DocumentationControllerFactory',
        'ZF\Apigility\Admin\Controller\Filters' => 'ZF\Apigility\Admin\Controller\FiltersControllerFactory',
        'ZF\Apigility\Admin\Controller\Hydrators' => 'ZF\Apigility\Admin\Controller\HydratorsControllerFactory',
        'ZF\Apigility\Admin\Controller\Validators' => 'ZF\Apigility\Admin\Controller\ValidatorsControllerFactory',
        'ZF\Apigility\Admin\Controller\InputFilter' => 'ZF\Apigility\Admin\Controller\InputFilterControllerFactory',
    ),
),
 public function getControllerConfig()
    {
        return array('factories' => array(
            'ZF\Apigility\Admin\Controller\Authentication' => function ($controllers) {
                $services = $controllers->getServiceLocator();
                $model    = $services->get('ZF\Apigility\Admin\Model\AuthenticationModel');
                return new Controller\AuthenticationController($model);
            },
            'ZF\Apigility\Admin\Controller\Authorization' => function ($controllers) {
                $services = $controllers->getServiceLocator();
                $factory  = $services->get('ZF\Apigility\Admin\Model\AuthorizationModelFactory');
                return new Controller\AuthorizationController($factory);
            },
            'ZF\Apigility\Admin\Controller\Config' => function ($controllers) {
                $services = $controllers->getServiceLocator();
                return new Controller\ConfigController($services->get('ZF\Configuration\ConfigResource'));
            },
            'ZF\Apigility\Admin\Controller\ModuleConfig' => function ($controllers) {
                $services = $controllers->getServiceLocator();
                return new Controller\ModuleConfigController($services->get('ZF\Configuration\ConfigResourceFactory'));
            },
            'ZF\Apigility\Admin\Controller\ModuleCreation' => function ($controllers) {
                $services = $controllers->getServiceLocator();
                $model    = $services->get('ZF\Apigility\Admin\Model\ModuleModel');
                return new Controller\ModuleCreationController($model);
            },
            'ZF\Apigility\Admin\Controller\Source' => function ($controllers) {
                $services = $controllers->getServiceLocator();
                $model    = $services->get('ZF\Apigility\Admin\Model\ModuleModel');
                return new Controller\SourceController($model);
            },
            'ZF\Apigility\Admin\Controller\Versioning' => function ($controllers) {
                $services = $controllers->getServiceLocator();
                $factory  = $services->get('ZF\Apigility\Admin\Model\VersioningModelFactory');
                return new Controller\VersioningController($factory);
            },
        ));
    }
我的问题是,为什么在这里会发生这种情况?使用
Module.php::getControllerConfig()
与仅在
Module.config.php
中列出工厂相比,我缺少什么


编辑:我想我在这里找到了问题的答案

您将看到
Module.php
中定义的所有工厂都使用闭包(又称匿名函数)。惯例是除了闭包之外,所有配置都进入
module.config.php

ZF具有内置的功能(默认情况下禁用)来缓存合并的配置文件,但是如果配置文件包含闭包,它就不能这样做,因为这些闭包无法序列化,因此无法缓存。通过将它们分开,可以启用配置缓存,从而提高性能


编辑:也许我们在这里谈的目的有些交叉。我上面的回答很有希望解释为什么不应该将
Module.php
中的闭包移动到模块配置文件中。当然,您可以为定义的每个闭包创建工厂类,然后在模块配置中列出这些类。有些人会考虑这种最佳做法(我个人很少这样做)。在这一点上,它是在易开发性和性能之间的权衡。创建一个四行闭包比创建一个全新的类要方便得多。

您将看到
Module.php
中定义的所有工厂都使用闭包(又称匿名函数)。惯例是除了闭包之外,所有配置都进入
module.config.php

ZF具有内置的功能(默认情况下禁用)来缓存合并的配置文件,但是如果配置文件包含闭包,它就不能这样做,因为这些闭包无法序列化,因此无法缓存。通过将它们分开,可以启用配置缓存,从而提高性能


编辑:也许我们在这里谈的目的有些交叉。我上面的回答很有希望解释为什么不应该将
Module.php
中的闭包移动到模块配置文件中。当然,您可以为定义的每个闭包创建工厂类,然后在模块配置中列出这些类。有些人会考虑这种最佳做法(我个人很少这样做)。在这一点上,它是在易开发性和性能之间的权衡。创建一个四行闭包要比创建一个全新的类方便得多。

好吧,那很好,因为我现在已经在module.config.php中找到了所有内容。。。这让我很困惑,看到这种替代的加载模式。因此,如果/当我启用缓存并希望我的模块缓存时,我应该将内容留在module.config.php中。养成将其分离的习惯是值得的,它不会花费更多时间,并且可能会在将来为您节省时间。还要考虑如果你想发布一个模块供其他人使用-如果你在配置文件中有闭包,你可能会破坏他们的缓存。我想我需要尽可能多的缓存。我在我的答案中添加了一点-希望能更清楚一点。谢谢蒂姆。我仍在从头开始学习ZF2,整个系统非常模糊。缺少我“获得”的文档有时会让我感到痛苦。除了为ZF2和/或Apigility的内部工作推荐的直接文档之外,还有其他书籍或教程吗?好的,那很好,因为我现在已经在module.config.php中找到了所有内容。。。这让我很困惑,看到这种替代的加载模式。因此,如果/当我启用缓存并希望我的模块缓存时,我应该将内容留在module.config.php中。养成将其分离的习惯是值得的,它不会花费更多时间,并且可能会在将来为您节省时间。还要考虑如果你想发布一个模块供其他人使用-如果你在配置文件中有闭包,你可能会破坏他们的缓存。我想我需要尽可能多的缓存。我在我的答案中添加了一点-希望能更清楚一点。谢谢蒂姆。我仍在从头开始学习ZF2,整个系统非常模糊。缺少我“获得”的文档有时会让我感到痛苦。对于ZF2和/或Apigility的内部工作,除了您推荐的直截了当的文档之外,还有其他书籍或教程吗?