1

我在这几个小时。我正在寻找一种从配置文件轻松访问应用程序范围变量的方法。我在https://discourse.laminas.dev/t/define-global-constant-for-use-site-wide/1455下读到常量不是一个好方法。

Zend 框架上 - 在控制器中获取配置据说我必须创建一个工厂并在工厂中实例化控制器时传递变量,然后我必须从那里将其注入视图模型或其他类。

但说真的,这对我来说似乎不是最好的方法。例如,如果我想访问存储在 global.php 或 application.config.php 中的变量,我必须编写 10-15 行代码,创建工厂等,直到我最终可以访问它?

没有更简单的方法吗?

4

2 回答 2

2

不一定需要 10-15 行代码,一行代码加上一行配置就足够了。

在实例化控制器对象的工厂方法中,可以检索配置变量值的单行可能如下所示:

$my_config_value = $container->get('config')['my_config_variable_name'];

此变量必须已在某个配置中声明和初始化,例如在 config/autoload/yourmodulename.php 配置文件中,返回的配置数组中有一行,如下所示:

'my_config_variable_name' => 'mys3containerpath.com/xxx',
于 2021-05-12T13:09:56.933 回答
0

您不必编写自定义工厂。使用 LazyControllerAbstractFactory 配置将传递给具有类型的构造函数参数array

// module.config.php
use Laminas\Mvc\Controller\LazyControllerAbstractFactory;
return [
// ...
'controllers' => [
        'abstract_factories' => [
            LazyControllerAbstractFactory::class,
        ],
    ],
];
SomeController class extends AbstractActionController
{
  private $configParam,$model;
  public function __construct(ModelClass $model,array $config)
  {
    $this->model=$model;
    $this->configParam=$config['paramName'];
  }
  public function indexAction()
  {
    return ['param'=>$this->configParam];
  }
}

相同的规则适用于 ReflectionBasedAbstractFactory。

于 2021-08-12T20:19:55.833 回答