2015-07-22 2 views
0

В моей UserEditType.php:2 поля паролей отличаются в Symfony2

<?php 

namespace HearWeGo\HearWeGoBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
use HearWeGo\HearWeGoBundle\Entity\User; 

class UserEditType extends AbstractType 
{ 
    protected $user; 

    public function __construct(User $user) 
    { 
     $this->user=$user; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getUser() 
    { 
     return $this->user; 
    } 

    /** 
    * @param mixed $user 
    */ 
    public function setUser($user) 
    { 
     $this->user = $user; 
    } 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('firstName','text',array('data'=>$this->user->getFirstName())) 
      ->add('lastName','text',array('data'=>$this->user->getLastName())) 
      ->add('email','email',array('data'=>$this->user->getEmail())) 
      ->add('dateOfBirth','date',array(
       'data'=>$this->user->getDateOfBirth(), 
       'years' => range(date('Y') -100, date('Y')-5))) 
      ->add('phone','text',array('data'=>$this->user->getPhone())) 
      ->add('password','repeated',array(
       'type'=>'password', 
       'invalid_message'=>'Password fields must match', 
       'options'=>array('attr'=>array('class'=>'password-field')), 
       'required'=>true, 
       'first_options'=>array('label'=>'Password'), 
       'second_options'=>array('label'=>'Confirm password'), 
      )) 
     ; 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 

     $resolver->setDefaults(array('data_class'=>"HearWeGo\\HearWeGoBundle\\Entity\\User")); 

    } 

    public function getName() 
    { 
     return 'user_edit'; 
    } 



} 
?> 

В profile.html.twig зрения:

<html> 

    <head> 
     <title>User Profile</title> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <link href="{{ asset('bundles/hearwegohearwego/css/bootstrap.min.css') }}" rel="stylesheet" type="text/css"> 
     <link href="{{ asset('bundles/hearwegohearwego/css/profile.css') }}" rel="stylesheet" type="text/css"> 
     <script src="{{ asset('bundles/hearwegohearwego/js/jquery-2.1.4.min.js') }}"></script> 
     <script src="{{ asset('bundles/hearwegohearwego/js/bootstrap.min.js') }}"></script> 
    </head> 

    <body> 
     <div id="toppage"> 
      <img src="{{ asset('bundles/hearwegohearwego/images/banner.png') }}" style="width:100%"> 
     </div> 
     <div class="container" align="center"> 
      <img src="{{ asset('bundles/hearwegohearwego/images/personal/profile.png') }}" style="height:40px"> 
      <div class="col-md-6"> 
       <img src="{{ asset('bundles/hearwegohearwego/images/personal/avatar.png') }}" style="width:300px;margin-top: 10px"> 
       {{ form_start(form) }} 
       <h4>{{ form.firstName.vars.data }} {{ form.lastName.vars.data }}</h4> 
      </div> 
      <div class="col-md-6" style="text-align:left"> 
       <h5>First Name</h5> 
       {{ form_widget(form.firstName,{'attr':{'size':'40'}}) }} 
       <h5>Second Name</h5> 
       {{ form_widget(form.lastName,{'attr':{'size':'40'}}) }} 
       <h5>Email</h5> 
       {{ form_widget(form.email,{'attr':{'size':'40'}}) }} 
       <h5>Phone</h5> 
       {{ form_widget(form.phone,{'attr':{'size':'40'}}) }} 
       <h5>Date of Birth</h5> 
       {{ form_widget(form.dateOfBirth) }} 
       <h5>Password</h5> 
       {{ form_widget(form.password.first,{'attr':{'size':'40'}}) }} 
       {{ form_widget(form.password.second,{'attr':{'size':'40'}}) }} 
       <br><br> 
       {{ form_widget(form.submit) }} 
       <br><br> 
       {{ form_end(form) }} 
      </div> 
     </div> 
     <div class="container" align="center"> 
      <img src="{{ asset('bundles/hearwegohearwego/images/personal/purchase.png') }}" style="height:40px"> 
     </div> 
    </body> 

    </html> 

В контроллере:

/** 
    * @Route("/profile",name="edit_profile") 
    */ 
    public function editProfile(Request $request) 
    { 
     if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')){ 
      return new Response('Please login'); 
     } 

     $this->denyAccessUnlessGranted('ROLE_USER', null, 'Unable to access this page!'); 

     $user=$this->get('security.token_storage')->getToken()->getUser(); 
     $form=$this->createForm(new UserEditType($user),$user,array('method'=>'POST','action'=>$this->generateUrl('edit_profile'))); 
     $form->add('submit','submit',array(
      'label'=>'', 
      'attr'=>array('class'=>'my-custom-button') 
     )); 
     if ($request->getMethod()=='POST') 
     { 
      $form->handleRequest($request); 
      if ($form->isValid()) 
      { 
       $em=$this->getDoctrine()->getEntityManager(); 
       $em->persist($user); 
       $em->flush(); 
       return $this->render('@HearWeGoHearWeGo/Default/profile.html.twig',array("form"=>$form->createView())); 
      } 
     } 

     return $this->render('@HearWeGoHearWeGo/Default/profile.html.twig',array("form"=>$form->createView())); 
    } 

Как я искал, то "повторил" поле Тип создает два одинаковых поля, значения которых должны совпадать. Этот вид, который я создал, предназначен для редактирования пользователем своего профиля, и они также могут изменять пароль. Я хочу использовать первое поле пароля для ввода пароля, который они хотят изменить, а второй для подтверждения. Там в любом случае?

+0

на первый взгляд, это должно работать. какую ошибку вы получаете? – Hakim

+0

Этот код не содержит ошибок. Я просто хочу сказать, что повторяющийся тип используется для 2 одинаковых полей с соответствующими значениями. Я показываю код, поэтому мне нужна помощь, чтобы исправить его, чтобы я мог использовать 2 поля пароля с разными значениями, а не с одинаковыми значениями, первый - сменить пароль, второй - подтвердить изменения. – necroface

+0

Ок, извините, я не понял, что , Вы не можете использовать повторное поле для этого. Оба значения должны совпадать в этом типе поля. – Hakim

ответ

1

Что вы можете сделать, это добавить простое поле пароля в вашу форму по соображениям безопасности. Пользователь, который хочет изменить свой пароль, должен предоставить старый. И затем вы добавляете повторяющееся поле пароля, чтобы пользователь мог ввести свой новый пароль (повторное поле также по соображениям безопасности, поэтому пользователь не делает опечатку). Вы можете пропустить это, хотя и просто поместите простое поле пароля для нового пароля.

Подводя итог, вам нужно два разных поля в вашей форме. Один для старого пароля и один для нового (повторный или простой, как вы пожелаете).

+0

Я создаю тип формы, который связан с сущностью, у моего объекта пользователя только одно поле пароля, я не могу добавить 2 отдельных поля пароля, потому что второе поле пароля не существует в Entity – necroface

+0

да, вы можете, просто добавить параметр "mapped" => false, например '-> add ('oldPassword', 'password', array (" mapped "=> false));' не забудьте проверить, что это поле соответствует текущему паролю пользователь – Hakim

+0

Я сделал это успешно, спасибо! – necroface

Смежные вопросы