Saya menggunakan pengaturan keamanan Symfony. Semuanya berfungsi dengan baik, tetapi saya tidak tahu bagaimana melakukan satu hal penting:
Dalam ranting, saya dapat mencapai info pengguna saat ini dengan melakukan:
Welcome, {{ app.user.username }}
atau serupa
Bagaimana cara mengakses informasi yang sama ini di Controller? Secara khusus, saya ingin mendapatkan entitas pengguna saat ini sehingga saya dapat menyimpannya secara relasional di entitas lain (pemetaan satu-ke-satu).
Aku benar-benar berharap itu akan terjadi
$this->get('security.context')->getToken()->getUser()
tapi itu tidak berhasil. Ini memberi saya kelas tipe
Symfony\Component\Security\Core\User\User
dan saya ingin salah satu tipe
Acme\AuctionBundle\Entity\User
yang merupakan entitas saya ....
entity-framework
security
symfony
Robert Martin
sumber
sumber
Jawaban:
Symfony 4+, 2019+ Approach
Dalam symfony 4 (mungkin 3.3 juga, tetapi hanya real-diuji dalam 4) Anda dapat menyuntikkan
Security
layanan melalui kabel otomatis di controller seperti ini:Symfony 2- Approach
Seperti yang dikatakan @ktolis, Anda harus mengkonfigurasi dulu
/app/config/security.yml
.Lalu dengan
harus enougth!
$user
adalah Obyek Pengguna Anda! Anda tidak perlu menanyakannya lagi.Temukan cara mengatur penyedia Anda
security.yml
dari Dokumentasi Sf2 dan coba lagi.Keberuntungan terbaik!
sumber
$user = $this->security->getUser();
,$user
selalunull
untuk saya, apakah masuk atau tidak.Praktek terbaik
Menurut dokumentasi karena Symfony 2.1 cukup gunakan pintasan ini:
Di atas masih bekerja pada Symfony 3.2 dan merupakan jalan pintas untuk ini:
Contoh : Dan jika Anda ingin langsung nama pengguna:
Jika tipe kelas pengguna salah
Pengguna akan menjadi objek dan kelas objek itu akan tergantung pada penyedia pengguna Anda .
sumber
Utasnya agak lama tetapi saya pikir ini mungkin bisa menghemat waktu seseorang ...
Saya mengalami masalah yang sama dengan pertanyaan awal, bahwa jenisnya ditampilkan sebagai Symfony \ Component \ Security \ Core \ User \ User
Akhirnya ternyata saya masuk menggunakan pengguna dalam memori
security.yml saya terlihat seperti ini
tipe pengguna in_memory selalu Symfony \ Component \ Security \ Core \ User \ User jika Anda ingin menggunakan entitas Anda sendiri, login menggunakan pengguna penyedia itu.
Terima kasih, hj
sumber
Dalam symfony> = 3.2, dokumentasi menyatakan bahwa:
Posting blog tentang itu
sumber
sumber
Nah, pertama-tama Anda perlu meminta nama pengguna dari sesi dalam aksi controller Anda seperti ini:
kemudian lakukan query ke db dan dapatkan objek Anda dengan dql seperti biasa
$ user sekarang harus memegang pengguna dengan nama pengguna ini (Anda juga bisa menggunakan bidang lain tentu saja)
... tetapi Anda harus terlebih dahulu mengkonfigurasi konfigurasi /app/config/security.yml Anda untuk menggunakan bidang yang sesuai untuk penyedia keamanan Anda seperti:
semoga ini membantu!
sumber
$this->get('security.context')->getToken()->getUser()
itu sendiri membuat Anda objek pengguna yang masuk. Anda tidak perlu menanyakannya kembali. Sebenarnya, versi apa yang Anda gunakan?