Easy admin 4, symfony 6

59 views Asked by At

`I've a task: i have two entities - Article(fields: title,text,id and collection of articleMedia) and ArticleMedia(url,id, article_id) so i need to create CRUD for creating an article( with an ability to attach media(img)) But i have a problem and misunderstanding why it doesn't work. So i got error:

Can't get a way to read the property "url" in class "Doctrine\Common\Collections\ArrayCollection".
#[ORM\Entity(repositoryClass: ArticleMediaRepository::class)]
class ArticleMedia
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    #[ORM\Column(length: 255)]
    private ?string $url = null;

    #[ORM\ManyToOne(inversedBy: 'articleMedia')]
    #[ORM\JoinColumn(name: "article_id", referencedColumnName: "id", nullable: false)]
    private ?Article $article_id = null;

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

    public function getUrl(): ?string
    {
        return $this->url;
    }

    public function setUrl(string $url): static
    {
        $this->url = $url;

        return $this;
    }

    public function getArticleId(): ?Article
    {
        return $this->article_id;
    }

    public function setArticleId(?Article $article_id): static
    {
        $this->article_id = $article_id;

        return $this;
    }
}
class Article
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    #[ORM\Column(length: 255)]
    private ?string $title = null;

    #[ORM\Column(length: 255)]
    private ?string $text = null;

    #[ORM\OneToMany(mappedBy: 'article', targetEntity: ArticleMedia::class)]
    private Collection $articleMedia;

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


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

    public function getTitle(): ?string
    {
        return $this->title;
    }

    public function setTitle(string $title): static
    {
        $this->title = $title;

        return $this;
    }

    public function getText(): ?string
    {
        return $this->text;
    }

    public function setText(string $text): static
    {
        $this->text = $text;

        return $this;
    }

    /**
     * @return Collection<int, ArticleMedia>
     */
    public function getArticleMedia(): Collection
    {
        return $this->articleMedia;
    }

    public function addArticleMedium(ArticleMedia $articleMedium): static
    {
        if (!$this->articleMedia->contains($articleMedium)) {
            $this->articleMedia->add($articleMedium);
            $articleMedium->setArticleId($this);
        }

        return $this;
    }

    public function removeArticleMedium(ArticleMedia $articleMedium): static
    {
        if ($this->articleMedia->removeElement($articleMedium)) {
            // set the owning side to null (unless already changed)
            if ($articleMedium->getArticleId() === $this) {
                $articleMedium->setArticleId(null);
            }
        }

        return $this;
    }

}
class ArticleCrudController extends AbstractCrudController
{
    public static function getEntityFqcn(): string
    {
        return Article::class;
    }


    public function configureFields(string $pageName): iterable
    {
        return [
            TextField::new('title'),
            TextEditorField::new('text'),
            ImageField::new('articleMedia.url')
                ->setUploadDir('public/uploads/')
                ->setFormTypeOptions([
                    'by_reference' => false,
                ])
                ->setRequired(false)
        ];
    }

}
0

There are 0 answers