0

我有一个实体用户,它是我的实体的基础:超级管理员、管理员、客户。

我的实体用户:


#[ORM\Entity(repositoryClass: UserRepository::class)]

#[UniqueEntity('email', repositoryMethod: 'findByEmail')]
abstract class User extends IdEntity implements UserInterface, 

    private ?string $email = null;

    private ?string $password = null;

    private ?string $firstName = null;

    private ?string $lastName = null;
}

用户的超级管理员、管理员和客户端扩展。我在 Client => 'city' 和 'zipcode' 中添加了 2 个属性。SuperAdmin 和 Admin 仅此而已

ROLES 和 ID 的设置不同,一切正常。当我创建管理员时,我的角色是“admin”,而客户端的角色是“client”。

在后台,我处理用户实体中的所有用户,但我想在编辑视图中添加来自客户端的 2 个属性,但我不知道如何管理它。

我的用户控制器:

<?php

declare(strict_types=1);

namespace App\Controller\Admin;

use App\Entity\Client;
use App\Entity\User;
use App\Field\AvatarChoiceField;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\EmailField;
use EasyCorp\Bundle\EasyAdminBundle\Field\FormField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TelephoneField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;

class UserCrudController extends AbstractCrudController
{
    public static function getEntityFqcn(): string
    {
        return User::class;
    }

    public function configureCrud(Crud $crud): Crud
    {
        return $crud
            ->setEntityLabelInSingular('admin.crud.user.label.singular')
            ->setEntityLabelInPlural('admin.crud.user.label.plural')
            ->setSearchFields(['firstName', 'lastName', 'email', 'phone'])
            ->setDefaultSort(['lastName' => 'ASC', 'firstName' => 'ASC', 'id' => 'ASC'])
        ;
    }

    public function configureFields(string $pageName): iterable
    {

        yield TextField::new('firstName', 'admin.crud.user.field.firstName')
            ->setColumns(4)
        ;

        yield TextField::new('lastName', 'admin.crud.user.field.lastName')
            ->setColumns(4)
        ;

        yield EmailField::new('email', 'admin.crud.user.field.email')
            ->setColumns(4)
        ;
        //I've tried this way but no results
        if (User::ROLE_CLIENT) {
            yield TextField::new('city','admin.crud.user.field.city')
                ->setColumns(4)
                ->setFormTypeOptions(['validation_groups' => 'edit'])
                ;

            yield TextField::new('zipcode','admin.crud.user.field.zipcode')
                ->setColumns(4)
                ->setFormTypeOptions(['validation_groups' => 'edit'])
            ;
        }
    }
}

所以我想在我的后台,如果我点击管理员,我可以编辑姓氏、电子邮件、名字,但如果我点击客户端,我可以编辑相同的属性 + 邮政编码和城市。

只有我(超级管理员)可以访问后台,因此“$this->getUser()”始终具有角色“super_admin”

任何想法 ?

4

0 回答 0