【发布时间】:2015-02-21 13:33:06
【问题描述】:
我已经从我的用户实体表单类型构建了一个添加用户表单。
此表单的验证在validation.yml 中指定,并且很有效。
但是,我知道希望实现编辑用户的功能。
我遇到的问题是更新用户密码字段,因为它们是字段的验证约束,不能留空。
我想重写此验证,以某种方式编辑用户或我可以实现此逻辑的某些方法(下面的伪代码示例):
If password is blank
do not update the password field
else if password is populated
trigger existing validation constraints as set in validation.yml
endif
我在网络上到处搜索,似乎找不到针对非常普遍的做法的体面解决方案。
控制器方法:
public function editAction(Request $request, $id){
$title = "Edit Player";
$user = $this->getUser();
//find the user objet by id
$fetchedUser = $this->getDoctrine()
->getRepository('BrsUserBundle:User')
->findOneById($id);
//create form from the found user object
$form = $this->createForm(new UserType(true), $fetchedUser);
//set the data from the join on the form select
$form->get('roles')->setData($fetchedUser->getRole()->current());
$currentPassword = $fetchedUser->getPassword();
$form->handleRequest($request);
// if($first = $request->get('user')['password']['first'] === "" && $second = $request->get('user')['password']['second'] === ""){
// $request->request->set('password',$currentPassword);
// }
// $form->getData()->setPassword('fdsfdsfdsffdsdfsfdsfdsfdsf');
// print_r($form->getData()->getPassword());
// var_dump($form->isEmpty());
return $this->render('BrsUserBundle:Crud:edit.html.twig', array(
'user'=>$user,
'title'=>$title,
'form'=>$form->createView()
));
}
用户表单类型:(正在进行中,所以尝试不同的东西)
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('username')
->add('roles','entity',array(
'class' => 'BrsUserBundle:Role',
'property' => 'role',
))
->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event){
$user = $event->getData();
$form = $event->getForm();
//var_dump($user['password']['first'] === '');
// $user['password']['second'] = "adssadasdsadsadsa";
// if($form->getData()->getPassword() && ($user['password']['first'] === '' && $user['password']['second'] === '')){
// unset($user['password']);
// }
//print_r($user);
//$event->setData($user);
$form->setData($user);
// print_r($form->getData());
var_dump($form->isValid());
})
->add('fname')
->add('lname')
->add('email')
->add('mobile')
->add('active')
->add('mentor')
->add('initialized');
//$builder->add( 'first_name', 'text', [ 'constraints' => new NotBlank( ['message'=>'Please provide your First Name.'] ), 'label' => 'First Name' ] )
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) {
$user = $event->getData();
$form = $event->getForm();
print_r($form->getData()->getPassword());
$builder->add('password','repeated',array(
'type' => 'password',
'invalid_message' => 'The password fields must match.',
'options' => array('attr' => array('class' => 'password-field')),
'first_options' => array('label' => 'Password'),
'second_options' => array('label' => 'Repeat Password'),
'required'=>false,
));
});
$builder->add('save','submit');
}
validation.yml
Brs\UserBundle\Entity\User:
properties:
username:
- NotBlank: ~
- Length:
min: 5
fname:
- NotBlank: ~
- Length:
min: 3
lname:
- NotBlank: ~
- Length:
min: 3
email:
- Email:
message: The email "{{ value }}" is not a valid email address.
checkMX: true
- NotBlank: ~
- Length:
min: 5
mobile:
- NotBlank: ~
active:
mentor:
initialized:
- Type: \DateTime
password:
- NotBlank: ~
- Length:
min: 8
任何帮助将不胜感激。
亚当
【问题讨论】:
-
你想多了。让自己成为一个专用的 ChangePasswordFormType 和控制器。要求输入新密码并进行更新。
-
我是这么认为的,你能详细说明一下你会怎么做吗?
-
您可以在表单构建器中设置一个“tempPassword”(非映射),并在其上进行逻辑,如果 tempPassword 有效,则由 usermanager 设置 plainPassword...
-
@Yenne Info,您能否详细说明如何操作?
标签: php forms validation symfony