FOSUserBundle: переопределить форму - PullRequest
3 голосов
/ 18 декабря 2011

Я пытаюсь переопределить форму FOSUserBundle «Редактировать профиль»;Я создал класс EditFormType в AP/UserBundle/Form/Type как:

<?php
namespace FOS\UserBundle\Form\Type;

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

class EditFormType extends BaseType
{


    public function buildForm(FormBuilder $builder, array $options)
    {
        $child = $builder->create('user', 'form', array('data_class' => $this->class));
        $this->buildUserForm($child, $options);

        $builder
            ->add($child)
            ->add('Mot de passe', 'password')
            ->add('Nom', 'nom')
            ->add('Prénom', 'prenom')
            ->add('Civilité', 'civilite')
            ->add('Newsletter', 'new_letter')
        ;
    }

    public function getDefaultOptions(array $options)
    {
        return array('data_class' => 'FOS\UserBundle\Form\Model\CheckPassword');
    }

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

Затем я создал свои службы AP/UserBundle/Resources/config/services.yml:

services:
    ap_user.edit.form.type:
        class: AP\UserBundle\Form\Type\EditFormType
        arguments: [%fos_user.model.user.class%]
        tags:
            - { name: form.type, alias: ap_edit_profile }

И, наконец, я обновил app/config/config.yml:

fos_user:
    profile:
        form:
        type: ap_edit_profile

И наконец я получил эту ошибку: Could not load type "ap_edit_profile"

Что может быть не так?

Спасибо!

Ответы [ 3 ]

6 голосов
/ 20 января 2012

Я полагаю, проблема в этой части конфигурации

fos_user:
    profile:
        form:
        type: ap_edit_profile

должно выглядеть

fos_user:
    profile:
        form:
            type: ap_edit_profile
0 голосов
/ 26 августа 2012

Я думаю, вам также нужно переопределить функцию buildUserForm() вместо buildForm(). Затем вы можете добавить все необходимые элементы в конструктор форм (просто не забудьте заранее позвонить parent::buildUserForm($builder, $options) (из другого вопроса ).

0 голосов
/ 19 декабря 2011

Сначала попробуйте то, что я написал в комментарии, которое, вероятно, потерпит неудачу с чем-то вроде could not find bla bla, затем замените эту строку:

пространство имен FOS \ UserBundle \ Form \ Type;

с этим:

пространство имен AP / UserBundle / Form / Type;

Также убедитесь, что ваш комплект расширяет FOS:

public function getParent()
{
    return 'FOSUserBundle';
}

в вашем основном * файле Bundle.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...