Symfony 不推荐使用的用户:该;fos“用户.更改密码.表格.工厂”;服务是私人的

Symfony 不推荐使用的用户:该;fos“用户.更改密码.表格.工厂”;服务是私人的,symfony,fosuserbundle,Symfony,Fosuserbundle,我得到以下错误。我正在使用symfony 3.4和fos捆绑包。此错误发生在密码更改路由上。如果有人能很快帮上忙,请告诉我。我有点着急 这不是一个错误。 这是一个警告,我认为这个信息是不言自明的 在没有看到您的代码的情况下,我无法确定到底出了什么问题,但这里是我的假设: 您必须通过$container->get('fos\u user.change\u password.form\u factory')调用该服务,警告说这不再是正确的方式,您应该进行依赖性注入 看看它是如何工作的,这不是一个错误

我得到以下错误。我正在使用symfony 3.4和fos捆绑包。此错误发生在密码更改路由上。如果有人能很快帮上忙,请告诉我。我有点着急

这不是一个错误。 这是一个警告,我认为这个信息是不言自明的

在没有看到您的代码的情况下,我无法确定到底出了什么问题,但这里是我的假设:

您必须通过
$container->get('fos\u user.change\u password.form\u factory')
调用该服务,警告说这不再是正确的方式,您应该进行依赖性注入

看看它是如何工作的,这不是一个错误。 这是一个警告,我认为这个信息是不言自明的

在没有看到您的代码的情况下,我无法确定到底出了什么问题,但这里是我的假设:

您必须通过
$container->get('fos\u user.change\u password.form\u factory')
调用该服务,警告说这不再是正确的方式,您应该进行依赖性注入


查看一下,看看它是如何工作的

我假设您正试图在控制器中使用表单工厂,如下所示:

$this->get('fos_user.change_password.form.factory');
在symfony中,您可以定义symfony将在请求时创建的类。它们通常在中定义

  • config/services.yaml
  • config/services.xml
  • 或config/services.php
服务可以将其他服务作为其参数,例如在yaml中:

serviceA:
    class: AppBundle\Service\ServiceA
    arguments:
        $email: 'test@domain.com'
serviceB:
    class: AppBundle\Service\ServiceB
    arguments:
        $serviceA: '@serviceA'
@符号很重要:它告诉容器您要传递id为serviceA的服务,而不仅仅是字符串“serviceA”

服务的定义是:

class serviceA {

    public function __construct($email) {

    }
}

class serviceB {

    public function __construct(ServiceA $serviceA) {

    }
}
在本例中,serviceA是serviceB的依赖项,这意味着symfony在创建serviceB时也将创建serviceA(如果尚未创建),并将其提供给serviceB的构造函数

服务被声明为私有或公共

自symfony 3.4以来,默认情况下服务是私有的:

您不能直接通过服务容器访问私有服务,必须将它们注入其他服务或控制器(通过将控制器定义为服务)

如果要在控制器中使用它,例如MyController,请首先将控制器定义为服务:

AppBundle\Controller\MyController:
    class: AppBundle\Controller\MyController
    public: true
    arguments:
        $formFactory: '@fos_user.change_password.form.factory'
并将控制器更改为:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use FOS\UserBundle\Form\Factory\FormFactory;

/**
 * @Route(service="AppBundle\Controller\MyController")
*/
class MyController {

    private $changePasswordFormFactory;
    public function __construct(FormFactory $formFactory) {
         $this->changePasswordFormFactory = $formFactory;
    }
}

有趣的是,在FOS用户捆绑回购协议中也提出了同样的请求,但随后被合并,但又被还原:


我假设您正试图在控制器中获取表单工厂,如下所示:

$this->get('fos_user.change_password.form.factory');
在symfony中,您可以定义symfony将在请求时创建的类。它们通常在中定义

  • config/services.yaml
  • config/services.xml
  • 或config/services.php
服务可以将其他服务作为其参数,例如在yaml中:

serviceA:
    class: AppBundle\Service\ServiceA
    arguments:
        $email: 'test@domain.com'
serviceB:
    class: AppBundle\Service\ServiceB
    arguments:
        $serviceA: '@serviceA'
@符号很重要:它告诉容器您要传递id为serviceA的服务,而不仅仅是字符串“serviceA”

服务的定义是:

class serviceA {

    public function __construct($email) {

    }
}

class serviceB {

    public function __construct(ServiceA $serviceA) {

    }
}
在本例中,serviceA是serviceB的依赖项,这意味着symfony在创建serviceB时也将创建serviceA(如果尚未创建),并将其提供给serviceB的构造函数

服务被声明为私有或公共

自symfony 3.4以来,默认情况下服务是私有的:

您不能直接通过服务容器访问私有服务,必须将它们注入其他服务或控制器(通过将控制器定义为服务)

如果要在控制器中使用它,例如MyController,请首先将控制器定义为服务:

AppBundle\Controller\MyController:
    class: AppBundle\Controller\MyController
    public: true
    arguments:
        $formFactory: '@fos_user.change_password.form.factory'
并将控制器更改为:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use FOS\UserBundle\Form\Factory\FormFactory;

/**
 * @Route(service="AppBundle\Controller\MyController")
*/
class MyController {

    private $changePasswordFormFactory;
    public function __construct(FormFactory $formFactory) {
         $this->changePasswordFormFactory = $formFactory;
    }
}

有趣的是,在FOS用户捆绑回购协议中也提出了同样的请求,但随后被合并,但又被还原:


您可以单击链接查看图像。事实上,我是stackoverflow的新手,这篇文章的编辑有点奇怪。下次发布之前,请花一些时间创建有价值的问题。你可以单击链接查看图片。事实上,我是stackoverflow的新手,这篇文章的编辑有点奇怪。下次发布之前,请花些时间提出有价值的问题。