HWIOAuth + FOSUser密码重定向

时间:2015-10-15 15:08:41

标签: symfony service

我使用此version来实现2个捆绑包。但是,我希望用户为他的帐户设置密码,因此在成功验证和创建用户之后,他将被重定向到他将输入该密码的表单。由于FOSUBUserProvider是一项服务,我正在考虑制作另一项处理密码表单的服务。我将第二个服务注入了第一个服务,但我需要@templating我已将其设置为参数,但我不知道如何接受它并且我收到警告他已经丢失了。我该如何解决这个问题?

#   /FOSUBUserProvider
$passwordSetter = Controller::get('register_social_password_picker');

我知道它需要第二个参数(对于templating),我从哪里拿走它?或者我是以错误的方式接近这个?

class RegisterPassword
{

    protected $user;
    protected $templating;

    public function __construct($user, $templating)
    {
        $this->user = $user;
        $this->templating = $templating;
    }
...
}

services.yml

my_user_provider:
    class: AppBundle\Security\Core\FOSUBUserProvider
    arguments: [@fos_user.user_manager,{facebook: facebook_id, twitter: twitter_id, linkedin: linkedin_id}, "@register_password" ]

register_password:
    class:        AppBundle\Service\RegisterPassword
    arguments:    ["@templating" ]

LE: services.yml

register_password:
    class:        AppBundle\Service\RegisterPassword
    arguments:    [ setMailer, ["@templating"] ]


class RegisterPassword
{
    protected $user;
    protected $templating;

    public function __construct( )
    {

    }

    public function setPassword(User $user, $templating)
    {
        $this->templating = $templating;
...
}

2 个答案:

答案 0 :(得分:0)

您的问题是服务构造函数需要两个参数($ user和$ templating),而您只传递一个(@templating)。这些参数在构建服务时传递,所以我的猜测是你不希望$ user成为构造函数的参数(此时你不知道哪个用户将使用该服务),所以只需传递$ templating参数,您可以稍后使用其他调用添加用户。

由于这似乎会产生循环引用问题,因此您可以使用以下三种策略之一:

  • 注入完整的服务容器并在需要时获取模板服务(不推荐)
  • 使用setter injection(http://symfony.com/doc/current/components/dependency_injection/types.html) 由于这在构建服务之后调用了setter方法,我的猜测是避免循环引用(不是100%肯定)
  • 如果这不起作用,请创建setter方法,但不要在服务构造点调用它,而是在以后想要使用服务时调用它

答案 1 :(得分:0)

但是,我尝试的方法稍微偏离了,登录后的重定向可以在security.yml> security> firewalls> firewall_name> default_target_path中轻松设置 我看起来像:

default_target_path: /redirect