我的问题是before。我还想访问位于我的个人库(在供应商目录中)的全局配置(config / {,*。} {global,local} .php)。我认为最接近的答案是here。我在班上创建了函数
public function getServiceConfig()
{
return array(
'factories' => array(
'funcservice' => function(\Zend\ServiceManager\ServiceLocatorInterface $sm) {
$config = $sm->get('config');
}
)
);
}
然而它有效但我无法弄清楚如何从结果中得到任何东西。
$config = $this->getServiceConfig();
print_r($config);
给了我
Array
(
[factories] => Array
(
[funcservice] => Closure Object
(
[this] => Tools\Model\StandartFuncs Object
(
[eventIdentifier:protected] => Zend\Mvc\Controller\AbstractActionController
[plugins:protected] =>
[request:protected] =>
[response:protected] =>
[event:protected] =>
[events:protected] =>
[serviceLocator:protected] =>
)
[parameter] => Array
(
[$sm] => <required>
)
)
)
)
来自$config = $this->getServiceConfig()->get('locales');
我
致命错误:在非对象上调用成员函数get()
答案 0 :(得分:2)
假设您有一个语言环境配置文件<?php
return array(
'hostname' => 'http://apachehost'
);
:
config/autoload
这些全局和本地配置文件应位于- root
- config
- autoload
- locales.global.php
- locales.local.php
- application.config.php
文件夹中。
文件夹结构:
application.config.php
然后使用'module_listener_options' => array(
'config_glob_paths' => array(
'config/autoload/{{,*.}global,{,*.}local}.php',
),
)
中的以下行加载它们。有关此高级配置的详细信息,请参阅here in the ZF2 documentation
ServiceManager
现在,您可以从$config = $serviceManager->get('Config');
实例访问您的配置,如下所示:
$config
此$locales = $config['locales'];
变量是一个数组。所以你不能用getter访问任何东西。你应该使用数组表示法:
Zend\Config\Config
如果你真的想使用getter,那么你必须对一个对象进行配置。您可以使用$config = new \Zend\Config\Config($config, false);
类执行此操作,如下所示:
$config->get('locales');
现在您可以像在问题中所写的那样访问:
*.local.php
如果要从供应商模块加载自动配置文件,通常会将模块附带的*.global.php
和/或var fs = require('fs');
var express = require('express');
var app = express();
var privateKey = fs.readFileSync('my_key.key', 'utf8');
var certificate = fs.readFileSync('my_cert.crt', 'utf8');
app.post('/process', function(req, res) {
// do something
}).listen(3000);
文件复制到自动加载文件夹并编辑复制的文件根据您的需求。
答案 1 :(得分:0)
我认为您并不完全理解您尝试实施的解决方案。您要添加到服务配置的工厂需要返回库类的实例。您将它放入工厂的原因是您可以将配置数组注入其中。所以你的代码应该更像这样:
public function getServiceConfig()
{
return array(
'factories' => array(
'funcservice' => function(\Zend\ServiceManager\ServiceLocatorInterface $sm) {
$config = $sm->get('config');
return new \SomeLibrary($config);
}
)
);
}
(其中SomeLibrary
是/vendor
)中您的图书馆类的名称。
然后,您需要使用服务管理器在您需要访问它时实例化您的库类,例如在控制器中:
public function someAction()
{
$yourLibrary = $this->getServiceLocator()->get('funcservice');
}
这将创建库类的实例,将config数组作为构造函数传递给第一个参数。你永远不需要自己打电话给getServiceConfig()
,这不会有任何成就。