2016-12-12 5 views
0

Я хочу повторно использовать поле формы, передав show_password_field как истинный в необязательном значении в AddUserType.php. Мое поле редактирования не должно содержать поля пароля. Поэтому я использовал этоНи свойства «пароль», ни один из методов не существует в twig/symfony

if ($options['show_password_field']) { 
     $builder->add('password','password',array('required'=>true)); 
    } 

в виде типа. Может ли кто-нибудь понять это? В чем проблема в строке 37 файла twig.

Ни свойство "пароль", ни один из методов "пароль()", "GetPassword()"/"ispassword()" или "__call()" существуют и имеют общественный доступ в классе " Symfony \ Component \ Form \ FormView»в SokosimuEditorBundle: Пользователь: addUser.html.twig в строке 37.

AddUserType.php

namespace Sokosimu\EditorBundle\Form\Type; 

    use Symfony\Component\Form\AbstractType; 
    use Symfony\Component\Form\FormBuilderInterface; 
    use Symfony\Component\Form\Extension\Core\Type\SubmitType; 
    use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

    class AddUserType extends AbstractType 
    { 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('alias','text',array('required'=>false)); 
    $builder->add('email', 'email',array('required'=>false)); 

    if ($options['show_password_field']) { 
     $builder->add('password','password',array('required'=>true)); 
    } 

    $builder->add('mobile','text',array('required'=>false)); 
    $builder->add('submit', 'submit'); 
} 

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Sokosimu\UserBundle\Entity\User', 
     'show_password_field' => true 
    )); 
} 

/** 
* Returns the name of this type. 
* 
* @return string The name of this type 
*/ 
public function getName() 
{ 
    return 'adduser'; 
    } 
} 

и Ли пе 37 в addUser.html.twig

<div class="form-group"> 
    <label for="password">Password:</label> 
    {{ form_widget(form.password,{'attr':{'class':'form-row'}}) }} 
    {{ form_errors(form.password) }} 
    </div> 

контроллер, который делает Отредактируйте

public function editEditorUserAction(User $user,Request $request){ 

    $form = $this->createForm(new AddUserType(),$user,array(
     'show_password_field' => false)); 

    $form->handleRequest($request); 
    if($form ->isValid() && $form->isSubmitted()){ 
     $em = $this->get('doctrine')->getManager(); 
     $editUser = $user ->getEditoruser(); 

     $em->persist($editUser); 
     $em->flush(); 

     return $this->redirect($this->generateUrl('sokosimu_editor_userlist')); 
    } 

    return $this->render('SokosimuEditorBundle:User:addUser.html.twig', array(
     'form' => $form->createView(), 
     'user' => $user->getId() 
    )); 
    } 

ответ

1

Вы должны проверить, если form.password существует.

{% if form.password is defined %} 
    <div class="form-group"> 
     <label for="password">Password:</label> 
     {{ form_widget(form.password,{'attr':{'class':'form-row'}}) }} 
     {{ form_errors(form.password) }} 
    </div> 
{% endif %} 
+0

Благодарим вас за ответ panche14. –