Symfony2服务类。功能调用

时间:2014-09-15 10:09:34

标签: php symfony

我有这样的服务:

  services:
    prodacom_authentication.encode:
      class: Prodacom\AuthenticationBundle\Service\Encode
      arguments: ["@security.context"]

我想在控制器中调用的服务功能:

public function encodePassword() {
    $factory = $this->get('security.encoder_factory');
    $user = new Prodacom\MainBundle\Entity\PdbUser();

    $encoder = $factory->getEncoder($user);
    $password = $encoder->encodePassword('ryanpass', $user->getSalt());
    var_dump($password);
    $user->setPassword($password);
}

我想在authenticationController.php中调用函数encodePassword。

    $this->get('prodacom_authentication.encode')->encodePassword();

但我一直收到这个错误:

    Attempted to call method "get" on class "Prodacom\AuthenticationBundle\Service\Encode" in C:\htdocs\domeinbeheer\src\Prodacom\AuthenticationBundle\Service\Encode.php line 12.

任何想法???

2 个答案:

答案 0 :(得分:1)

如果要在另一个服务中使用服务,则必须使用依赖注入。

$this->get()仅在控制器上下文中可用。

您可以在官方文档中找到完整示例: http://symfony.com/doc/2.3/components/dependency_injection/introduction.html

注意 :您必须在注入时传递所需的每项服务或参数。 注入容器来调用其他服务似乎更容易,但这是一种不好的做法。

答案 1 :(得分:1)

问题出在您方法的第二行,您可以在其中调用:$this->get('security.encoder_factory')

在您的服务中,如果您没有自己实施方法,则不会定义方法get()。你的控制器有它,因为它扩展了一个名为ContainerAware的类,它实现了这个方法。

您现在可以注入完整的依赖项容器(不推荐),或者只需将您需要的服务注入服务中。以下列出了可用于将服务注入服务的不同方法:http://symfony.com/doc/current/components/dependency_injection/types.html

我看到你已经熟悉构造函数注入...