2

我正在尝试使用easyAdmin在两个类之间建立一个简单的ManyToMany关系,当我尝试添加时,什么也没发生,所以在配置yml中我添加了by_reference false,但我经常遇到这个错误:

无法确定“App\Entity\Subject”类中属性“users”的访问类型。

这是我的班级用户:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @UniqueEntity(fields="email", message="Email already taken")
 * @ORM\Table(name="user")
 */
class User implements UserInterface
{
/**
 * @ORM\Id
 * @ORM\GeneratedValue
 * @ORM\Column(type="integer")
 */
private $id;

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

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

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

/**
 * @ORM\Column(name="username", type="string", length=100, nullable=true)
 */
private $username;

/**
 * @var string
 *
 * @ORM\Column(name="role", type="array", nullable=false)
 * @Assert\NotBlank()
 */
private $role;

/**
 * @Assert\NotBlank()
 * @Assert\Length(max=4096)
 * @ORM\Column(name="password", type="string", length=255)
 */
private $password;

/**
 * @var \DateTime $createdAt
 * @ORM\Column(name="created_at", type="datetime", length=100)
 */
private $createdAt;

/**
 * @ORM\ManyToOne(targetEntity="Program", inversedBy="users", cascade={"persist"})
 * @ORM\JoinColumn(name="program_id", referencedColumnName="id")
 */
protected $program;

/**
 * @ORM\OneToMany(targetEntity="Mark", mappedBy="user", cascade={"remove","persist"})
 */
protected $marks;

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

/**
 * @ORM\ManyToMany(targetEntity="Subject", inversedBy="users", cascade={"persist"})
 * @ORM\JoinTable(name="subject_user")
 */
private $subjects;



public function __construct()
{
    $this->createdAt = new \DateTime(date('Y-m-d H:i:s'));
    $this->sortRole = "ROLE_USER";
    $this->subjects = new ArrayCollection();
}

public function __toString(){
    return $this->username;
}

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

public function getFirstname()
{
    return $this->firstname;
}

public function setFirstname($firstname)
{
    $this->firstname = $firstname;
}

public function getLastname()
{
    return $this->lastname;
}

public function setLastname($lastname)
{
    $this->lastname = $lastname;
}

public function getUsername()
{
    return $this->username;
}

public function setUsername($username)
{
    $this->username = $username;
}

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

public function setEmail($email)
{
    $this->email = $email;
}

public function getPassword()
{
    return $this->password;
}

public function setPassword($password)
{
    $this->password = $password;
}

/**
 * @return \DateTime
 */
public function getCreatedAt()
{
    return $this->createdAt;
}

/**
 * @param \DateTime $createdAt
 */
public function setCreatedAt(\DateTime $createdAt)
{
    $this->createdAt = $createdAt;
}

/**
 * @inheritDoc
 */
public function getSalt()
{
    return null;
}

/**
 * Set role
 *
 * @param array $role
 *
 * @return User
 */
public function setRole($role)
{
    $this->role = $role;

    return $this;
}

/**
 * Get role
 *
 * @return array
 */
public function getRole()
{
    return $this->role;
}

/**
 * @inheritDoc
 */
public function getRoles()
{
    return $this->role;
}

/**
 * @inheritDoc
 */
public function eraseCredentials()
{
}


/**
 * Get the value of program
 */ 
public function getProgram()
{
    return $this->program;
}

/**
 * Set the value of program
 *
 * @return  self
 */ 
public function setProgram($program)
{
    $this->program = $program;

    return $this;
}

/**
 * Get the value of marks
 */ 
public function getMarks()
{
    return $this->marks;
}

/**
 * Set the value of marks
 *
 * @return  self
 */ 
public function setMarks($marks)
{
    $this->marks = $marks;

    return $this;
}

/**
 * Get the value of sortRole
 */ 
public function getSortRole()
{
    return $this->sortRole;
}

/**
 * Set the value of sortRole
 *
 * @return  self
 */ 
public function setSortRole($sortRole)
{
    $this->sortRole = $sortRole;

    return $this;
}

/**
 * Get the value of subjects
 */ 
public function getSubjects()
{
    return $this->subjects;
}



public function setSubject(\App\Entity\Subject $subject)
{
    $subject->setUser($this);
    $this->subjects[] = $subject;
    return $this;
}

public function removeSubjects(Subject $subject){
    $this->subjects->removeElement($subject);
}
}

这是我的主题课:

    <?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Entity()
 * @ORM\Table(name="subject")
 */
class Subject 
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

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

    /**
     * @ORM\ManyToOne(targetEntity="Program", inversedBy="subject", cascade={"persist"})
     * @ORM\JoinColumn(name="program_id", referencedColumnName="id")
     */
    protected $program;

    /**
     * @ORM\OneToMany(targetEntity="Mark", mappedBy="subject", cascade={"remove","persist"})
     */
    protected $mark;

    /**
     * @ORM\ManyToMany(targetEntity="User", mappedBy="subjects")
     */
    private $users;


    public function __toString(){
        return $this->name;
    }

    public function __construct(){
        $this->users = new ArrayCollection();
    }

    /**
     * Get the value of id
     */ 
    public function getId()
    {
        return $this->id;
    }

    /**
     * Get the value of name
     */ 
    public function getName()
    {
        return $this->name;
    }

    /**
     * Set the value of name
     *
     * @return  self
     */ 
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get the value of program
     */ 
    public function getProgram()
    {
        return $this->program;
    }

    /**
     * Set the value of program
     *
     * @return  self
     */ 
    public function setProgram($program)
    {
        $this->program = $program;

        return $this;
    }

    /**
     * Get the value of mark
     */ 
    public function getMark()
    {
        return $this->mark;
    }

    /**
     * Set the value of mark
     *
     * @return  self
     */ 
    public function setMark($mark)
    {
        $this->mark = $mark;

        return $this;
    }

     /**
      * Get the value of users
      */ 
     public function getUsers()
     {
        return $this->users;
     }

    /**
     * Add category
     *
     * @param User $user
     */
    public function addUser(User $user)
    {
        $this->users[] = $user;

    }
     public function setUser(\App\Entity\User $user)
     {
          //$user->setSubject($this);
          $this->users[] = $user;

          return $this;
     }

     public function removeUsers(User $user){
         $this->users->removeElement($user);
     }
}

和 easy_admin.yml 中的小配置:

Inscrit:
    class: App\Entity\Subject
        form:
            fields:
                 - { property: 'name', label: 'Nom de la matière' }
                 - { property: 'users', type_options: { mapped: true, by_reference: false} }

我很迷茫,我真的不知道问题出在哪里,我不明白为什么我经常遇到这个错误......

4

0 回答 0