EasyAdmin 3: लॉग-इन उपयोगकर्ता के लिए डेटा को सीमित करता है फिर भी प्रपत्र ड्रॉपडाउन में अन्य डेटा दिखाता है
मैं सिम्फनी 5 का उपयोग कर रहा हूं।
मैं चाहता हूं कि उपयोगकर्ता हर लॉग इन EasyAdmin 3 में अपना स्थान रखे, इसलिए कोई उपयोगकर्ता अन्य उपयोगकर्ताओं के रिकॉर्ड नहीं देखेगा। मैं डेटाबेस में प्रत्येक तालिका के साथ उपयोगकर्ता को संग्रहीत करता हूं।
सरल सूची दृश्यों के लिए, मैं इसका विस्तार करने के लिए काम करने में कामयाब रहा AbstractCrudController
:
<?php
namespace App\Controller\Admin;
use Doctrine\ORM\QueryBuilder;
use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection;
use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
use EasyCorp\Bundle\EasyAdminBundle\Dto\SearchDto;
use EasyCorp\Bundle\EasyAdminBundle\Orm\EntityRepository;
abstract class CustomCrudController extends AbstractCrudController
{
public function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityDto, FieldCollection $fields, FilterCollection $filters): QueryBuilder
{
$qb = $this->get(EntityRepository::class)->createQueryBuilder($searchDto, $entityDto, $fields, $filters);
$qb->andWhere('entity.user = :user'); $qb->setParameter('user', $this->getUser()); return $qb;
}
}
मैं भी एक के माध्यम से उपयोगकर्ता की दुकान / जाँच करें EventSubscriber
।
समस्या यह है कि, कुछ रूपों का दूसरे एंटिटी (जैसे AssociationField::new('food')
) से संबंध है और ड्रॉपडाउन को भरने के दौरान यह मेरे नए कार्य की उपेक्षा करता है। तो आप एक अन्य उपयोगकर्ता से संबंधित रिकॉर्ड देखेंगे।
मैं इन ड्रॉपडाउन को ओवरराइड कैसे कर सकता हूं केवल वर्तमान उपयोगकर्ता से संबंधित डेटा दिखाने के लिए?
जवाब
मुझे समाधान मिला: EntityType
सिम्फनी के अंतर्निहित क्षेत्र के लिए एक कस्टम क्वेरी पास करें ।
AssociationField::new('food')
->setRequired(true)
->setFormTypeOptions(['query_builder' => function (EntityRepository $em) { return $em->createQueryBuilder('f')
->where('f.user = :user')
->orderBy('f.title', 'ASC')
->setParameter('user', $this->getUser())
;
}]),