Vraag FOSUserBundle: unieke index voor e-mail verwijderenCanonical


Ik probeer de unieke index op emailCanonical te verwijderen, zodat meerdere gebruikers hetzelfde e-mailadres kunnen delen. Ik wil FOS / UserBundle / Resources / config / doctrine / User.orm.xml echter niet rechtstreeks bewerken, omdat updates in de bundel zelf de wijziging zullen verwijderen. Is er een manier waarop ik het veld emailCanonical in mijn eigen bundel kan overschrijven, terwijl ik de basisgebruiker (FOS / UserBundle / Model / User.php) uitbreid?

use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Foo\BarBundle\Constant\SecurityConstant;

class User extends BaseUser {
    protected $id;
...
}

Bij voorbaat bedankt!


11
2018-01-28 06:06


oorsprong


antwoorden:


De enige manier om dit te doen is om het FOS\UserBundle\Model\User klasse en vervolgens opnieuw alle kaarten toewijzen (alles in User.orm.xml) jezelf.

bron:


7
2018-01-31 06:49



Het antwoord dat is gemarkeerd als nu (14 oktober 2014) is helemaal niet het juiste antwoord.

Dit is de enige juiste oplossing:

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", column=@ORM\Column(type="string", name="email", length=255, unique=false, nullable=true)),
 *      @ORM\AttributeOverride(name="emailCanonical", column=@ORM\Column(type="string", name="email_canonical", length=255, unique=false, nullable=true))
 * })
 */
class User extends BaseUser
{
...
}

Ook moet u validatiegroepen voor uw gebruikersformulier overschrijven:

# 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

Wat hebben we gedaan? We hebben validatiegroepen gewoon opnieuw gemaakt om niet overeen te komen met de FOS-standaardvalidaties. In plaats daarvan zal uw formulier alleen worden gevalideerd met Default groep. Beschreven hierboven validatie UniqueEntity waarvoor geen enkele groep is gekoppeld Default groep.


38
2018-06-12 07:28



Aanvulling op het antwoord van Tim, dit is hoe je het zou doen met 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

1
2018-02-04 11:14