【问题标题】:Service for get parameters from yml从 yml 获取参数的服务
【发布时间】:2018-10-23 07:50:22
【问题描述】:

我在 symfony 中从 yml 文件获取参数的服务有问题。现在我的服务看起来很简单。

class MyService extends Controller
{
    /**
     * @var string
     */
    private $keys;

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

    public function getKeys()
    {
        return $this->keys;
    }

}

在Controller方法中:

 public function exampleAction()
    {
        $keys = new MyService('keys');
        return var_dump($this->getParameter($keys->getKeys()));

    }

但是当我尝试在服务中添加 getParameter 函数时(查看此文本下的代码)它不起作用。 服务:

class MyService extends Controller
{
    /**
     * @var string
     */
    private $keys;

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

    public function getKeys()
    {
        return $this->getParameter($this->keys);
    }

}

和控制器:

public function exampleAction()
    {
        $keys = new MyService('keys');
         return var_dump($keys->getKeys());

    }

谁能告诉我怎么了? 谢谢 :)

【问题讨论】:

  • 您不应使用new 关键字创建服务,而应使用 DIC 将其连接起来。你可以在那里传递你的参数。
  • 您使用的是 Symfony 框架还是仅使用几个组件?如果您使用的是框架,那么您的方法存在根本缺陷,您应该查看文档中的服务容器部分。下面的答案试图理解您发布的代码,但您几乎完全走错了轨道。

标签: php symfony service


【解决方案1】:

我不知道你的参数结构,但你可以以此为例。如果你想访问

你的钥匙

.

parameters:
    key:
        yourKey: bar
        bar: baz

$params = $this->getParameter('bar');
$yourKey = $params['yourKey'];

您可以在此处了解有关 YAML 的更多信息The Yaml Component

【讨论】:

    【解决方案2】:

    即使您提到这是一项服务,它实际上是一个controller。 (因为您的服务扩展了controller)。我认为这不是最好的方法。

    但是,因为您在 controller 中并且没有提到任何类型的 DI,所以您可以这样做。

    public function __construct(Symfony\Component\DependencyInjection\Container $container)
    {
        $this->container = $container;
    }
    
    public function getKeys()
    {
        return $this->container->getParameter('keys');
    }
    

    请注意

    但是,如果您使用的是DI。不要注入整个container,因为它有很多性能缺陷。只传递必需的参数。

    谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2016-08-17
      • 2016-12-10
      • 2011-08-18
      • 1970-01-01
      • 2012-07-17
      相关资源
      最近更新 更多