Zend Framework 3 如何访问 Globle.php 文件

Zend Framework 3 How Access Globle.php file

在 Zend Framework 3 中,我在 Config/autoload/myconfig 中创建了文件。globle.php

return [
      "myvariable" => [
            "key" => "value"
      ]
];

我可以通过这个访问

$config = $this->getServiceLocator()->get('Config');

给出以下错误:

在插件管理器中找不到名为 "getServiceLocator" 的插件 Zend\Mvc\Controller\PluginManager

现在我如何在 Zend Framework 3 的 Controller 中访问这个文件。

这里有很多东西:

首先,服务定位器已被删除。因此,您必须为您的控制器创建一个工厂,或者使用 configuration based abstract factory.

然后,您的文件必须遵循 application.config.php 中定义的模式,即 global.php*.global.phplocal.php*.local.php。在您的消息中,您的配置被命名为 myconfig.globle.php 而不是 myconfig.global.php.

那么:

final class MyController extends AbstractActionController
{
    private $variable;

    public function __construct(string $variable)
    {
        $this->variable = $variable;
    }

    public function indexAction()
    {
        // do whatever with variable
    }
}

你还需要一个配置:

return [
    'controllers' => [
        'factories' => [
            MyController::class => MyControllerFactory::class,
        ],
    ],
];

最后,让我们MyControllerFactory class:

final class MyControllerFactory
{
    public function __invoke(Container $container) : MyController
    {
        $config = $container->get('config');
        if (!isset($config['myvariable']['key']) || !is_string($config['myvariable']['key'])) {
            throw new Exception(); // Use a specific exception here.
        }
        $variable = $config['myvariable']['key']; // 'value'
        return new MyController($variable);
    }
}

应该差不多了:)