首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EasyAdmin 3.1 CrudControllers Symfony

EasyAdmin 3.1 CrudControllers Symfony
EN

Stack Overflow用户
提问于 2020-08-14 11:07:49
回答 2查看 4.4K关注 0票数 2

设置我的Crud Controller的关联字段时有问题。我只想在ROLE_字段中看到某个klient_id_klienta的用户,我不知道如何设置它。

这是我的CrudController:

代码语言:javascript
复制
class AdresKlientaCrudController extends AbstractCrudController
{
    public static function getEntityFqcn(): string
    {
        return AdresKlienta::class;
    }

    /*
    public function configureFields(string $pageName): iterable
    {
        return [
            IdField::new('id'),
            TextField::new('title'),
            TextEditorField::new('description'),
        ];
    }
    */

//    public function configureFields(string $pageName): iterable
//    {
//        return [
//            'id',
//            'klient_id_klienta',
//            'miejscowosc',
//            'ulica',
//            'nr_domu',
//            'nr_lokalu',
//            'kod_pocztowy'
//        ];
//    }
    public function configureFields(string $pageName): iterable
    {

        //moje
//        $qb = new QueryBuilder($this->getDoctrine()->getManager());
//        $qb->select('u')->from('User','u')->where('u.roles = ?ROLE_USER');
//
//
//        dump(EntityFilter::new('klient_id_klienta')->apply($qb));

        //koniec moje

        $foreignKey = AssociationField::new('klient_id_klienta'); //here is my problem as it shows every user
        return [
//            IdField::new('id'),
            TextField::new('miejscowosc'),
            TextField::new('ulica'),
            TextField::new('nr_domu'),
            TextField::new('nr_lokalu'),
            TextField::new('kod_pocztowy'),
            //AssociationField::new('klient_id_klienta')
            $foreignKey

        ];
    }
}

这是用户实体

代码语言:javascript
复制
<?php

namespace App\Entity;

use App\Repository\UserRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;

/**
 * @ORM\Entity(repositoryClass=UserRepository::class)
 */
class User implements UserInterface
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=180, unique=true)
     */
    private $email;



    /**
     * @ORM\Column(type="json")
     */
    private $roles = [];



    /**
     * @var string The hashed password
     * @ORM\Column(type="string")
     */
    private $password;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $name;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $surname;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $tel;


    public function getId(): ?int
    {
        return $this->id;
    }

    public function getEmail(): ?string
    {
        return $this->email;
    }

    public function setEmail(string $email): self
    {
        $this->email = $email;

        return $this;
    }

    /**
     * A visual identifier that represents this user.
     *
     * @see UserInterface
     */
    public function getUsername(): string
    {
        return (string) $this->email;
    }

    /**
     * @see UserInterface
     */
    public function getRoles(): array
    {
        $roles = $this->roles;
        // guarantee every user at least has ROLE_USER


        return array_unique($roles);
    }

    public function setRoles(array $roles): self
    {
        $this->roles = $roles;

        return $this;
    }

    /**
     * @see UserInterface
     */
    public function getPassword(): string
    {
        return (string) $this->password;
    }

    public function setPassword(string $password): self
    {
        $this->password = $password;

        return $this;
    }

    /**
     * @see UserInterface
     */
    public function getSalt()
    {
        // not needed when using the "bcrypt" algorithm in security.yaml
    }

    /**
     * @see UserInterface
     */
    public function eraseCredentials()
    {
        // If you store any temporary, sensitive data on the user, clear it here
        // $this->plainPassword = null;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }

    public function getSurname(): ?string
    {
        return $this->surname;
    }

    public function setSurname(string $surname): self
    {
        $this->surname = $surname;

        return $this;
    }

    public function getTel(): ?string
    {
        return $this->tel;
    }

    public function setTel(string $tel): self
    {
        $this->tel = $tel;

        return $this;
    }


    //moje funkcje
    public function __toString()
    {
        // TODO: Implement __toString() method.
        $userAndRole = implode($this->roles);
        return $this->email.'-'.$userAndRole;
    }
}

用户

我试着使用过滤器,但是从Easyadmin文档过滤器中可以看到,允许我根据它们得到的设置选择,这样就不适合我了。我还试图使用QueryBuilder来获得具有特定ROLE_的用户,但这也失败了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-18 16:20:42

我想明白了,我想谢谢你的回答。我之所以发布我的解决方案,是因为我不想成为那些说“我想出来了”的人之一,也不想发布他们是如何发现的。

代码语言:javascript
复制
public function configureFields(string $pageName): iterable
    {
        //utworzenie wyświetlania tylko tych użytkowników, którzy maja role ROLE_USER
        $association = AssociationField::new('klient_id_klienta', 'Email klienta')
            ->setFormTypeOption(

                    'query_builder', function (UserRepository  $userRepository){
                        return $userRepository->createQueryBuilder('u')
                            ->andWhere('u.roles LIKE :role')->setParameter('role', '%"ROLE_USER"%');
                    }
            );
        return [
//            IdField::new('id'),
            TextField::new('miejscowosc', 'Miejscowość'),
            TextField::new('ulica', 'Ulica'),
            TextField::new('nr_domu', 'Numer domu'),
            TextField::new('nr_lokalu', 'Numer Lokalu'),
            TextField::new('kod_pocztowy', 'Kod pocztowy'),
            $association,//wywołanie klucza obcego który odfiltrowuje użytkowników

        ];
    }

如您所见,我通过使用查询生成器获得了我想要得到的特定角色的用户。神奇的工具,通过那个查询程序,我几乎可以从我的数据库中得到任何我想要的东西,并把它放在我的Crud控制器中。我希望有一天它能帮到别人。

票数 4
EN

Stack Overflow用户

发布于 2020-09-15 12:53:48

试试这个:

代码语言:javascript
复制
public function configureFields(string $pageName): iterable
{
    $users = $this->entityManager->getRepository(User::class)->findBy([
            'roles' => 'ROLE_USER']);
    yield AssociationField::new('klient_id_klienta')->onlyOnForms()->setFormTypeOptions(["choices" => $users->toArray()]);
      
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63411595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档