默认的form包含注册用户,修改用户信息,修改密码等等,如果想对User追加属性,或者追加追加一部分功能,那就需要重写form。
- 创建如下的ORM User类,追加属性name
<?php // src/Acme/UserBundle/Entity/User.php use FOS\UserBundle\Entity\User as BaseUser; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; class User extends BaseUser { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @ORM\Column(type="string", length=255) * * @Assert\NotBlank(message="Please enter your name.", groups={"Registration", "Profile"}) * @Assert\MinLength(limit="3", message="The name is too short.", groups={"Registration", "Profile"}) * @Assert\MaxLength(limit="255", message="The name is too long.", groups={"Registration", "Profile"}) */ protected $name; // ... }
* 默认情况下,新用户注册时会调用注册验证配置文件,如果需要对name属性做验证,请确保验证文件已经加入name属性。
- 例如追加name属性,可以进行下边修改
<?php // src/Acme/UserBundle/Form/Type/RegistrationFormType.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('name'); } public function getName() { return 'acme_user_registration'; } }
- 修改service.yml配置文件
# 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 }
- 修改config.yml配置文件
# app/config/config.yml fos_user: # ... registration: form: type: acme_user_registration