Intereting Posts
Форсирование диалога «Сохранить как» через jQuery GET получить количество дней с заданных дат в массиве php Функция Codeigniter Mail отправляет почту в папку спама htmlspecialchars против htmlentities, когда речь идет о XSS Fullcalender два события в день Примечание: Неопределенное смещение: 0 в Закрытие сеанса после выполнения запроса к базе данных Доктрина Symfony Многие для многих вставляют Как динамически генерировать инструкцию MYSQL UPDATE на основе определенных переменных из HTML FORM Использовать учетную запись службы, чтобы проверить Google InAppPurchase file_get_contents () дать мне 403 Запрещено Нужна помощь с reCAPTCHA – продолжайте получать неверный код-captcha-sol передовая практика / структура запросов PHP AJAX SELECT, где значение строки содержит строку MySQL Как я получу дни рождения друзей, которые отмечают свой день рождения на этой неделе, в этом месяце и в следующем месяце, используя MYSQL и PHP?

Добавление объекта расширенного профиля в FOS UserBundle

Я пытаюсь расширить FOS UserBundle, чтобы позволить расширенным объектам профиля хранить дополнительную информацию в дополнение к основным полям UserBundle. Поскольку у меня есть несколько типов пользователей на сайте, я создал отдельные объекты для хранения информации профиля. У меня есть объекты, созданные следующим образом:

class UserProfile { /** * @var integer */ private $id; /** * @var integer */ private $userId; /** * @var string */ private $phone; /** * @var string */ private $language; /** * @var string */ private $company; /** * @var string */ private $salutation; /** * @var string */ private $fax; /** * @var string */ private $region; 

Моя конфигурация

 type: entity table: user_profile fields: id: type: integer id: true generator: strategy: AUTO phone: type: string length: '15' language: type: string length: '50' company: type: string length: 255 salutation: type: string length: '5' fax: type: string length: '15' region: type: string length: 255 oneToOne: userId: targetEntity: User joinColumn: name: user_id referencedColumnName: id lifecycleCallbacks: { } 

У меня есть несколько других типов пользователей с более конкретной информацией, которая сильно отличается, поэтому мне нужны отдельные сущности, например, у меня может быть пользователь с тремя адресами или идентификаторами сотрудников и т. Д. Учитывая это, как мне реализовать регистрационную форму для создавать информацию профиля пользователя, когда я создаю информацию UserBundle? Заранее спасибо!

Если вы используете MySQL и php для определения ваших объектов, вам необходимо создать свой Entity следующим образом:

 <?php // src/Acme/UserBundle/Entity/UserProfile.php namespace Acme\UserBundle\Entity; use FOS\UserBundle\Entity\User as BaseUser; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="user_profile") */ class UserProfile extends BaseUser { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @var string */ private $phone; /** * @var string */ private $language; //.................... //Add all your properties here public function __construct() { parent::__construct(); // your own logic } } 

Второй шаг – создать тип формы, запрашивая нужные поля:

 // src/Acme/UserBundle/Form/Type/RegistrationFormType.php <?php namespace Acme\UserBundle\Form\Type; use Symfony\Component\Form\FormBuilderInterface; use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType; class RegistrationFormType extends BaseType { public function buildForm(FormBuilderInterface $builder, array $options) { parent::buildForm($builder, $options); // add your custom field $builder->add('phone'); $builder->add('language'); //............... //Add all your properties here with $builder->add('property name') } public function getName() { return 'acme_user_registration'; } } 

Теперь вам нужно сообщить, что вы хотите использовать свою собственную форму:

 # src/Acme/UserBundle/Resources/config/services.yml services: acme_user.registration.form.type: class: Acme\UserBundle\Form\Type\RegistrationFormType arguments: [%fos_user.model.user.class%] tags: - { name: form.type, alias: acme_user_registration } 

Последний шаг – сообщить FOSUserBundle, что он будет использовать ваш тип формы вместо стандартного:

 # app/config/config.yml fos_user: # ... registration: form: type: acme_user_registration 

Источник:

https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/index.md#step-3-create-your-user-class
https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_forms.md