2016-11-04 58 views
-1

我正在使用symfony2.Im使用FOSUserBundle,所以我想重寫編輯用戶的FormType以將名稱添加到生成器。所以我應該怎麼做呢?如何覆蓋ProfileFormType來編輯用戶? symfony2

什麼我已經做了:

ProfileFormType:

<?php 

namespace UserBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilder; 
use FOS\UserBundle\Form\Type\ProfileFormType as BaseType; 

class ProfileFormType extends BaseType { 

    public function buildForm(FormBuilderInterface $builder, array $options) { 
     parent::buildForm($builder, $options); 
     // add your custom field 
     $builder->add('name') 
       ->add('roles', 'collection', array(
        'type' => 'choice', 
        'options' => array(
         'choices' => array(
          'ROLE_ADMIN' => 'Admin')))) 
       ->add('image', new ImageType()) 

     ; 
    } 

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

} 

services.yml

user.edit.form.type: 
    class: UserBundle\Form\Type\ProfileFormType 
    arguments: [%fos_user.model.user.class%] 
    tags: 
     - { name: form.type, alias: user_edit_profile } 

edit.html.twig

{% extends "UserBundle::layout.html.twig" %} 


{% block body %} 
    <center> <h1> Modification de profile </h1> </center> 
    <aside class="col-sm-3"> 
     <div class="panel panel-default"> 
      <div class="panel-heading">Modification</div> 
      <div class="panel-body"> 
       Veuillez remplir les champs 
      </div> 
     </div> 
    </aside> 

    <!--timeline--> 
    <section class="timeline col-sm-9"> 
     <!--post Timeline--> 
     <div class="thumbnail thumbnail-post"> 
      <!--caption--> 
      <div class="caption"> 


       <form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" class="form-horizontal"> 


        <div class="form-group"> 

         {{ form_errors(form.name) }} 
         <div class="col-sm-9"> 
          Name {{ form_widget(form.name, { 'attr': {'class': 'form-control', 'placeholder': 'form.name'|trans } }) }} 
         </div> 

        </div> 



        <div class="form-group"> 

         {{ form_errors(form.email) }} 
         <div class="col-sm-9"> 
          Email {{ form_widget(form.email, { 'attr': {'class': 'form-control', 'placeholder': 'form.email'|trans } }) }} 
         </div> 

        </div> 
        <div class="form-group"> 

         {{ form_errors(form.username) }} 
         <div class="col-sm-9"> 
          Pseudo {{ form_widget(form.username, { 'attr': {'class': 'form-control', 'placeholder': 'form.username'|trans } }) }} 

         </div> 

        </div> 

        <div class="form-group"> 

         {{ form_errors(form.current_password) }} 
         <div class="col-sm-9"> 
          Mot de passe actuelle {{ form_widget(form.current_password, { 'attr': {'class': 'form-control', 'placeholder': 'form.current_password'|trans } }) }} 

         </div> 

        </div> 


        </br> 



        {{ form_rest(form) }} 


        <div class="form-group"> 
         <div class="col-md-4 col-sm-4 col-xs-12 col-md-offset-3"> 
          <input class="btn btn-default submit" type="submit" value="{{ 'registration.submit'|trans }}"> 
         </div> 
        </div> 
       </form> 
      </div> <!--#caption--> 


      <!--#post timeline--> 
     </div> 
     <!--#timeline--> 
    </section> 





{% endblock %} 

{% block js %} 

    <script> 
     $(document).ready(function() { 

      $('#roles').hide(); 
     }); 


    </script> 


{% endblock %} 

我得到這個錯誤:

Neither the property "name" nor one of the methods "name()", "getname()"/"isname()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView" in FOSUserBundle:Profile:edit.html.twig at line 28.

我該如何解決這個問題。

回答

0
profile: 
     form: 
      type: fos_user_profile 

它需要,在FOS

0

更新你的服務文件:

user.edit.form.type: 
    class: UserBundle\Form\Type\ProfileFormType 
    arguments: [%fos_user.model.user.class%] 
    decorates: fos_user.profile.form.type 
    tags: 
     - { name: form.type, alias: user_edit_profile } 

fos_user.profile.form.type是意味着我們的服務的名稱將被更換我們的服務,它的名字user.edit.form.type

添加use Symfony\Component\Form\FormBuilderInterface;

你有錯誤:

Neither the property "name" nor one of the methods "name()", "getname()"/"isname()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView" in FOSUserBundle:Profile:edit.html.twig at line 28. 

由於fos_user_user表沒有名稱字段。如果你想添加一個字段,而不是在表格中定位,你應該在實體生成getters和setter字段中添加這些字段,最後創建新的遷移並遷移。

+0

的config.yml我不明白 – Ld91

+2

我更新了答案。 –

+0

我有這個錯誤: 編譯錯誤:聲明UserBundle \ Form \ Type \ ProfileFormType :: buildForm()必須與Symfony \ Component \ Form \ FormTypeInterface :: buildForm(Symfony \ Component \ Form \ FormBuilderInterface $ builder, array $ options) – Ld91