Tit*_*tus 3 profile overriding symfony fosuserbundle
我将FOSUserBundle的注册表格覆盖了附加字段:它运作良好.
当我应用相同的逻辑来覆盖配置文件表单时:表单显示我的附加字段,但都是空的(字段不包含已连接用户的值).
注意:当我使用捆绑包中的默认表单时,配置文件表单包含已连接用户的值.
是否有比较覆盖注册表单以检索已连接用户的值的特定操作?
这是代码:
services:
...
vn_user.profile.form.type:
class: Vn\UserBundle\Form\Type\ProfileFormType
arguments: [%fos_user.model.user.class%]
tags:
- { name: form.type, alias: vn_user_profile }
vn_user.form.handler.profile:
class: Vn\UserBundle\Form\Handler\ProfileFormHandler
arguments: ["@fos_user.profile.form", "@request", "@fos_user.user_manager"]
scope: request
public: false
Run Code Online (Sandbox Code Playgroud)
fos_user:
...
profile:
form:
type: vn_user_profile
handler: vn_user.form.handler.profile
Run Code Online (Sandbox Code Playgroud)
namespace Vn\UserBundle\Form\Type;
use Symfony\Component\Form\FormBuilder;
use FOS\UserBundle\Form\Type\ProfileFormType as BaseType;
class ProfileFormType extends BaseType
{
public function buildUserForm(FormBuilder $builder, array $options)
{
parent::buildUserForm($builder, $options);
// custom field
$builder->add('profile',new MyProfileFormType(),array(
'label' => 'PROFILE'
));
}
public function getName()
{
return 'vn_user_profile';
}
}
Run Code Online (Sandbox Code Playgroud)
namespace Vn\UserBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
class MyProfileFormType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('birthday','birthday', array(
'input' => 'array',
'widget' => 'choice',
'label' => 'Birthday',
))
->add('firstname','text', array(
'trim' => true,
'label' => 'Firstname',
))
->add('lastname','text', array(
'trim' => true,
'label' => 'Lastname',
))
->add('gender','choice', array(
'choices' => array('1' => 'Male', '2' => 'Female'),
'expanded' => true,
'required' => true,
'label' => 'Vous êtes',
));
}
public function getName()
{
return 'vn_user_myprofile';
}
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'Vn\UserBundle\Document\Profile',
);
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的文件ProfilFormeHandler.php中发现了错误:在函数process()中我调用了parent :: onSucess()而不是parent :: process()...结果是一个"无声"的bug(沉默因为没有致命的错误因为我的错,当然
感谢您花时间尝试帮助我,非常抱歉!
<?php
// src/Vn/UserBundle/Form/Handler/RegistrationFormHandler.php
namespace Vn\UserBundle\Form\Handler;
use FOS\UserBundle\Form\Handler\ProfileFormHandler as BaseHandler;
use FOS\UserBundle\Model\UserInterface;
class ProfileFormHandler extends BaseHandler
{
public function process(UserInterface $user)
{
//parent::onSuccess($user);
parent::process($user); // sound better of course : )
}
protected function onSuccess(UserInterface $user)
{
$this->userManager->updateUser($user);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10843 次 |
| 最近记录: |