EasyAdmin 3: लॉग-इन उपयोगकर्ता के लिए डेटा को सीमित करता है फिर भी प्रपत्र ड्रॉपडाउन में अन्य डेटा दिखाता है

Aug 17 2020

मैं सिम्फनी 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')) से संबंध है और ड्रॉपडाउन को भरने के दौरान यह मेरे नए कार्य की उपेक्षा करता है। तो आप एक अन्य उपयोगकर्ता से संबंधित रिकॉर्ड देखेंगे।

मैं इन ड्रॉपडाउन को ओवरराइड कैसे कर सकता हूं केवल वर्तमान उपयोगकर्ता से संबंधित डेटा दिखाने के लिए?

जवाब

1 Oli Aug 17 2020 at 14:24

मुझे समाधान मिला: 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())
        ;
}]),