`当我尝试添加与模数具有多对多关系的 acao (课程)新记录时,我收到错误预期参数类型为“App\Entity\Modulo”,在属性路径中给出“字符串”模”。
阿果班
<pre><code>
<?php
namespace App\Entity;
use App\Repository\AcaoRepository;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
#[ORM\Entity(repositoryClass: AcaoRepository::class)]
class Acao
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column]
private ?int $number = null;
#[ORM\Column(length: 255)]
private ?string $nome = null;
public function getId(): ?int
{
return $this->id;
}
public function getNumber(): ?int
{
return $this->number;
}
public function setNumber(int $number): self
{
$this->number = $number;
return $this;
}
public function getNome(): ?string
{
return $this->nome;
}
public function setNome(string $nome): self
{
$this->nome = $nome;
return $this;
}
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Modulo")
* @ORM\JoinTable(name="acao_modulo",
* joinColumns={@ORM\JoinColumn(name="acao_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="modulo_id", referencedColumnName="id")}
* )
*/
private $modulos;
// ...
public function __construct()
{
$this->modulos = new ArrayCollection();
}
/**
* @return Collection|Modulo[]
*/
public function getModulos(): Collection
{
return $this->modulos ?: new ArrayCollection();
}
public function addModulo(Modulo $modulo): self
{
if (!$this->modulos->contains($modulo)) {
$this->modulos[] = $modulo;
}
return $this;
}
public function removeModulo(Modulo $modulo): self
{
$this->modulos->removeElement($modulo);
return $this;
}
public function __toString()
{
return (string)$this->nome;
}
}
AcaoControllerCRUD
<?php
namespace App\Controller\Admin;
use App\Entity\Acao;
use App\Form\ModuloType;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Field\NumberField;
use EasyCorp\Bundle\EasyAdminBundle\Field\CollectionField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ArrayField;
class AcaoCrudController extends AbstractCrudController
{
public static function getEntityFqcn(): string
{
return Acao::class;
}
public function configureFields(string $pageName): iterable
{
return [
NumberField::new('number'),
TextField::new('nome'),
// Define the Many-to-Many relationship field
CollectionField::new('modulos')
//->setEntryType(ModuloType::class) // Replace ModuloType with your form type for Modulo entity
->setEntryIsComplex(false) // Set to true if related entity is complex
->setFormTypeOptions([
'by_reference' => false, // Ensure that the form is processed correctly for Many-to-Many
])
->onlyOnForms(), // Display this field only on forms
];
}
}
ModuloEntity
<?php
namespace App\Entity;
use App\Repository\ModuloRepository;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
#[ORM\Entity(repositoryClass: ModuloRepository::class)]
class Modulo
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
#[ORM\Column]
private ?int $number = null;
#[ORM\Column(length: 255)]
private ?string $nome = null;
public function getId(): ?int
{
return $this->id;
}
public function getNumber(): ?int
{
return $this->number;
}
public function setNumber(int $number): static
{
$this->number = $number;
return $this;
}
public function getNome(): ?string
{
return $this->nome;
}
public function setNome(string $nome): static
{
$this->nome = $nome;
return $this;
}
/**
* @ORM\ManyToMany(targetEntity=Acao::class, mappedBy="modulos")
*/
private $acoes;
public function __construct()
{
$this->acoes = new ArrayCollection();
}
/**
* @return Collection|Acao[]
*/
public function getAcoes(): Collection
{
return $this->acoes;
}
public function addAcao(Acao $acao): self
{
if (!$this->acoes->contains($acao)) {
$this->acoes[] = $acao;
$acao->addModulo($this);
}
return $this;
}
public function removeAcao(Acao $acao): self
{
if ($this->acoes->removeElement($acao)) {
$acao->removeModulo($this);
}
return $this;
}
}
</code></pre>
我不明白我遇到的错误。我在我的 CRUD 控制器中传递了一个模数实例,而不是一个字符串。
我认为你可以在 CRUD 控制器中尝试使用 AssociationField 而不是 CollectionField:
<?php
namespace App\Controller\Admin;
use App\Entity\Acao;
use App\Form\ModuloType;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField;
use EasyCorp\Bundle\EasyAdminBundle\Field\TextField;
use EasyCorp\Bundle\EasyAdminBundle\Field\NumberField;
use EasyCorp\Bundle\EasyAdminBundle\Field\CollectionField;
use EasyCorp\Bundle\EasyAdminBundle\Field\ArrayField;
class AcaoCrudController extends AbstractCrudController
{
public static function getEntityFqcn(): string
{
return Acao::class;
}
public function configureFields(string $pageName): iterable
{
return [
NumberField::new('number'),
TextField::new('nome'),
// Define the Many-to-Many relationship field
AssociationField::new('modulos')
// Add your Options here
];
}
}
这样 EasyAdmin 将映射您的 CRUD 中的实体。 我希望这会有所帮助:)