zend文件application.config.php
提供了一些缓存配置的方法,我发现它非常适合生产系统:
return array(
'modules' => array(
'Application',
),
'module_listener_options' => array(
'module_paths' => array(
'./module',
'./vendor'
),
'config_glob_paths' => array('config/autoload/{,*.}{global,local}.php'),
'config_cache_enabled' => true,
'config_cache_key' => md5('config'),
'module_map_cache_enabled' => true,
'module_map_cache_key' => md5('module_map'),
'cache_dir' => './data/cache',
),
);
然而,激活会立即导致
等错误Fatal error: Call to undefined method Closure::__set_state()
这与作为闭包的工厂有关,例如:
'service_manager' => array(
'factories' => array(
'auth.service' => function($sm) {
/* hic sunt ponies */
},
),
),
不幸的是,the issues only告诉我为什么发生此错误,但不知道如何解决。
我如何重做这个和类似的factories
,以便缓存可以与它们一起使用?
答案 0 :(得分:11)
将工厂关闭重新设计为工厂类。
'service_manager' => array(
'factories' => array(
'auth.service' => \Fully\Qualified\NS\AuthFactory::class,
),
),
namespace Fully\Qualified\NS;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class AuthFactory implements FactoryInterface
{
public function createService(ServiceLocatorInterface $serviceLocator) {
// create your object and set dependencies
return $object
}
}
除了这种使缓存成为可能的方法之外,另一个优点是PHP将更快地解析您的配置,因为它不必为每个anonymous function的每个请求创建一个Closure类。