Ответ 1
Единственный способ сделать это - расширить класс FOS\UserBundle\Model\User
, а затем повторно выполнить все сопоставление (все в User.orm.xml
).
Источники:
- Замена отображения пакета
- FOSUserBundle Проблема № 345
Я пытаюсь удалить уникальный индекс в emailCanonical, чтобы несколько пользователей могли использовать один и тот же адрес электронной почты. Тем не менее, я не хочу редактировать FOS/UserBundle/Resources/config/doctrine/User.orm.xml напрямую, так как любые обновления самого пакета удаляют это изменение. Есть ли способ переопределить поле emailCanonical в моем собственном пакете, а расширение базового пользователя (FOS/UserBundle/Model/User.php)
use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Foo\BarBundle\Constant\SecurityConstant;
class User extends BaseUser {
protected $id;
...
}
Спасибо заранее!
Единственный способ сделать это - расширить класс FOS\UserBundle\Model\User
, а затем повторно выполнить все сопоставление (все в User.orm.xml
).
Источники:
Ответ, отмеченный как прямо сейчас (14 октября 2014 г.), не является правильным ответом.
Это единственное правильное решение:
namespace XXX\UserBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\Collection;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* @ORM\Table(name="User_User")
* @ORM\Entity(repositoryClass="UserRepository")
* @UniqueEntity(fields="usernameCanonical", errorPath="username", message="fos_user.username.already_used")
* @ORM\AttributeOverrides({
* @ORM\AttributeOverride(name="email", [email protected]\Column(type="string", name="email", length=255, unique=false, nullable=true)),
* @ORM\AttributeOverride(name="emailCanonical", [email protected]\Column(type="string", name="email_canonical", length=255, unique=false, nullable=true))
* })
*/
class User extends BaseUser
{
...
}
Также вам необходимо переопределить группы проверки для вашей пользовательской формы:
# app/config/config.yml
...
fos_user:
profile:
form:
validation_groups: [Default] # Here you can also add your own groups if you have extra validation
registration:
form:
validation_groups: [Default] # Here you can also add your own groups if you have extra validation
Что мы сделали? Мы просто переопределили группы проверки, чтобы они не соответствовали проверкам FOS по умолчанию. Вместо этого ваша форма будет проверена только с помощью группы Default
. Описанная выше проверка UniqueEntity
, которая не имеет какой-либо группы, будет соответствовать группе Default
.
Дополнение к ответу Тима, вот как вы это сделаете с помощью YAML:
My\UserBundle\Entity\User:
type: entity
table: null
repositoryClass: My\UserBundle\Entity\UserRepository
attributeOverride:
usernameCanonical:
unique: false
name: usernameCanonical
column: username_canonical
length: 255
nullable: false
type: string
emailCanonical:
unique: false
name: emailCanonical
column: email_canonical
length: 255
nullable: false
type: string
fields:
id:
type: integer
id: true
generator:
strategy: AUTO
firstName:
type: string
length: 255