Di mana tempat terbaik untuk memasukkan batasan validasi kunci komposit ke dalam pembuat Formulir, yang terkait dengan entitas User
FOSUserBundle
?
Izinkan saya menjelaskannya.
Saya memiliki entitas User
yang memperluas FOSUserBundle\Model\User
. Saya menambahkan beberapa bidang (khususnya bidang team
). Setiap User
dimiliki tepat oleh satu Team
.
Sekarang saya ingin membuat sistem registrasi yang memungkinkan pengguna menjadi anggota satu tim tertentu secara langsung (dengan memiliki rute seperti /register/{teamSlug}
). Pengguna baru harus memasukkan alamat emailnya, namun email harus unik hanya pada tingkat tim. Batasan ini diterjemahkan menjadi UNIQUE KEY team_email (team_id, email)
dalam database pilihan.
Secara alami, saya akan memiliki kunci unik yang ditentukan dalam tabel database, tetapi itu hanya akan memastikan bahwa tidak ada data yang dimasukkan, sambil melemparkan pengecualian database ketika upaya penulisan yang tidak valid dilakukan.
Saya mempertimbangkan untuk menggunakan atribut @UniqueEntity
pada entitas User
, tetapi sepertinya tidak berhasil:
(Sunting: Saya menambahkan pernyataan use
yang hilang.)
use FOS\UserBundle\Model\User as BaseUser;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* @ORM\Table(name="user")
* @UniqueEntity(
* fields={"email", "team"},
* message="This email already exists in this team."
* )
*/
class User extends BaseUser
{
// ...
}
Hal lain yang saya temukan adalah penegasan panggilan balik. Mungkin saya bisa menggunakannya untuk memverifikasi apakah email ada dalam lingkup tim ketika validasi instance FormBuilder dengan data_class dari MyBundle\Entity\User
berjalan, namun, itu akan merusak enkapsulasi Entitas karena mengharuskan Entitas mengetahui tentang Repositorinya sendiri, dan seterusnya.
Apa pendekatan terbaik untuk melakukan hal ini?