assets
bin
config
migrations
public
src
Controller
Entity
.gitignore
Blog.php
Comment.php
Projects.php
Quotes.php
ResetPasswordRequest.php
Section.php
User.php
EntityListener
Form
Repository
Security
Kernel.php
templates
translations
.env
.gitignore
README.md
bootstrap.js
composer.json
composer.lock
controllers.json
docker-compose.override.yml
docker-compose.yml
package.json
symfony.lock
webpack.config.js
yarn.lock
300 lines
5.0 KiB
PHP
300 lines
5.0 KiB
PHP
<?php
|
|
|
|
namespace App\Entity;
|
|
|
|
use App\Repository\BlogRepository;
|
|
use Doctrine\Common\Collections\ArrayCollection;
|
|
use Doctrine\Common\Collections\Collection;
|
|
use Doctrine\ORM\Mapping as ORM;
|
|
use JetBrains\PhpStorm\Pure;
|
|
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
|
|
use Symfony\Component\String\Slugger\SluggerInterface;
|
|
|
|
/**
|
|
* @ORM\Entity(repositoryClass=BlogRepository::class)
|
|
* @ORM\HasLifecycleCallbacks()
|
|
* @UniqueEntity("slug")
|
|
*/
|
|
class Blog
|
|
{
|
|
/**
|
|
* @ORM\Id
|
|
* @ORM\GeneratedValue
|
|
* @ORM\Column(type="integer")
|
|
*/
|
|
private $id;
|
|
|
|
/**
|
|
* @ORM\Column(type="string", length=255)
|
|
*/
|
|
private ?string $title;
|
|
|
|
/**
|
|
* @ORM\Column(type="text", nullable=true)
|
|
*/
|
|
private ?string $teaser;
|
|
|
|
/**
|
|
* @ORM\Column(type="string", length=255, nullable=true)
|
|
*/
|
|
private ?string $teaserImage;
|
|
|
|
/**
|
|
* @ORM\Column(type="text")
|
|
*/
|
|
private ?string $content;
|
|
|
|
/**
|
|
* @ORM\ManyToOne(targetEntity=User::class, inversedBy="blogs")
|
|
* @ORM\JoinColumn(nullable=false)
|
|
*/
|
|
private ?User $author;
|
|
|
|
/**
|
|
* @ORM\ManyToMany(targetEntity=Section::class, inversedBy="blogs")
|
|
*/
|
|
private $section;
|
|
|
|
/**
|
|
* @ORM\Column(type="datetime")
|
|
*/
|
|
private ?\DateTimeInterface $createdAt;
|
|
|
|
/**
|
|
* @ORM\Column(type="datetime", nullable=true)
|
|
*/
|
|
private ?\DateTimeInterface $editedAt;
|
|
|
|
/**
|
|
* @ORM\ManyToOne(targetEntity=User::class)
|
|
*/
|
|
private ?User $editedBy;
|
|
|
|
/**
|
|
* @ORM\Column(type="string", length=255, nullable=true)
|
|
*/
|
|
private ?string $editReason;
|
|
|
|
/**
|
|
* @ORM\OneToMany(targetEntity=Comment::class, mappedBy="blog")
|
|
*/
|
|
private $comments;
|
|
|
|
/**
|
|
* @ORM\Column(type="string", length=255, unique=true)
|
|
*/
|
|
private $slug;
|
|
|
|
#[Pure]
|
|
public function __construct()
|
|
{
|
|
$this->section = new ArrayCollection();
|
|
$this->comments = new ArrayCollection();
|
|
}
|
|
|
|
/**
|
|
* @return null|string
|
|
*/
|
|
public function __toString()
|
|
{
|
|
return $this->title;
|
|
}
|
|
|
|
|
|
public function getId(): ?int
|
|
{
|
|
return $this->id;
|
|
}
|
|
|
|
public function getTitle(): ?string
|
|
{
|
|
return $this->title;
|
|
}
|
|
|
|
public function setTitle(string $title): self
|
|
{
|
|
$this->title = $title;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getTeaser(): ?string
|
|
{
|
|
return $this->teaser;
|
|
}
|
|
|
|
public function setTeaser(?string $teaser): self
|
|
{
|
|
$this->teaser = $teaser;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getTeaserImage(): ?string
|
|
{
|
|
return $this->teaserImage;
|
|
}
|
|
|
|
public function setTeaserImage(?string $teaserImage): self
|
|
{
|
|
$this->teaserImage = $teaserImage;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getContent(): ?string
|
|
{
|
|
return $this->content;
|
|
}
|
|
|
|
public function setContent(string $content): self
|
|
{
|
|
$this->content = $content;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getAuthor(): ?User
|
|
{
|
|
return $this->author;
|
|
}
|
|
|
|
public function setAuthor(?User $author): self
|
|
{
|
|
$this->author = $author;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @return Collection|Section[]
|
|
*/
|
|
public function getSection(): Collection
|
|
{
|
|
return $this->section;
|
|
}
|
|
|
|
public function addSection(Section $section): self
|
|
{
|
|
if (!$this->section->contains($section)) {
|
|
$this->section[] = $section;
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function removeSection(Section $section): self
|
|
{
|
|
$this->section->removeElement($section);
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getCreatedAt(): ?\DateTimeInterface
|
|
{
|
|
return $this->createdAt;
|
|
}
|
|
|
|
public function setCreatedAt(\DateTimeInterface $createdAt): self
|
|
{
|
|
$this->createdAt = $createdAt;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getEditedAt(): ?\DateTimeInterface
|
|
{
|
|
return $this->editedAt;
|
|
}
|
|
|
|
public function setEditedAt(?\DateTimeInterface $editedAt): self
|
|
{
|
|
$this->editedAt = $editedAt;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getEditedBy(): ?User
|
|
{
|
|
return $this->editedBy;
|
|
}
|
|
|
|
public function setEditedBy(?User $editedBy): self
|
|
{
|
|
$this->editedBy = $editedBy;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getEditReason(): ?string
|
|
{
|
|
return $this->editReason;
|
|
}
|
|
|
|
public function setEditReason(?string $editReason): self
|
|
{
|
|
$this->editReason = $editReason;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* @return Collection|Comment[]
|
|
*/
|
|
public function getComments(): Collection
|
|
{
|
|
return $this->comments;
|
|
}
|
|
|
|
public function addComment(Comment $comment): self
|
|
{
|
|
if (!$this->comments->contains($comment)) {
|
|
$this->comments[] = $comment;
|
|
$comment->setBlog($this);
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function removeComment(Comment $comment): self
|
|
{
|
|
if ($this->comments->removeElement($comment)) {
|
|
// set the owning side to null (unless already changed)
|
|
if ($comment->getBlog() === $this) {
|
|
$comment->setBlog(null);
|
|
}
|
|
}
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getSlug(): ?string
|
|
{
|
|
return $this->slug;
|
|
}
|
|
|
|
public function setSlug(string $slug): self
|
|
{
|
|
$this->slug = $slug;
|
|
return $this;
|
|
}
|
|
|
|
|
|
/**
|
|
* @ORM\PrePersist
|
|
*/
|
|
public function onPrePersist()
|
|
{
|
|
$this->createdAt = new \DateTime();
|
|
}
|
|
|
|
/**
|
|
* @param SluggerInterface $slugger
|
|
*/
|
|
public function computeSlug(SluggerInterface $slugger)
|
|
{
|
|
$this->slug = $slugger->slug($this->title);
|
|
}
|
|
|
|
}
|