我使用此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;
...
}
答案 0 :(得分:0)
您的问题是服务构造函数需要两个参数($ user和$ templating),而您只传递一个(@templating)。这些参数在构建服务时传递,所以我的猜测是你不希望$ user成为构造函数的参数(此时你不知道哪个用户将使用该服务),所以只需传递$ templating参数,您可以稍后使用其他调用添加用户。
由于这似乎会产生循环引用问题,因此您可以使用以下三种策略之一:
答案 1 :(得分:0)
但是,我尝试的方法稍微偏离了,登录后的重定向可以在security.yml> security> firewalls> firewall_name> default_target_path中轻松设置 我看起来像:
default_target_path: /redirect