You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.8 KiB
66 lines
1.8 KiB
<?php |
|
|
|
namespace common\modules\blog\services; |
|
|
|
use common\modules\blog\entities\BlogCategory; |
|
use common\modules\blog\forms\BlogCategoryForm; |
|
use common\modules\blog\repositories\BlogCategoryRepository; |
|
use common\modules\blog\repositories\BlogRepository; |
|
use core\entities\Meta; |
|
|
|
class BlogCategoryManageService |
|
{ |
|
private $categories; |
|
private $posts; |
|
|
|
public function __construct(BlogCategoryRepository $categories, BlogRepository $posts) |
|
{ |
|
$this->categories = $categories; |
|
$this->posts = $posts; |
|
} |
|
|
|
public function create(BlogCategoryForm $form): BlogCategory |
|
{ |
|
$category = BlogCategory::create( |
|
$form->name, |
|
$form->slug, |
|
$form->title, |
|
$form->description, |
|
$form->sort, |
|
new Meta( |
|
$form->meta->title, |
|
$form->meta->description, |
|
$form->meta->keywords |
|
) |
|
); |
|
$this->categories->save($category); |
|
return $category; |
|
} |
|
|
|
public function edit($id, BlogCategoryForm $form): void |
|
{ |
|
$category = $this->categories->get($id); |
|
$category->edit( |
|
$form->name, |
|
$form->slug, |
|
$form->title, |
|
$form->description, |
|
$form->sort, |
|
new Meta( |
|
$form->meta->title, |
|
$form->meta->description, |
|
$form->meta->keywords |
|
) |
|
); |
|
$this->categories->save($category); |
|
} |
|
|
|
public function remove($id): void |
|
{ |
|
$category = $this->categories->get($id); |
|
if ($this->posts->existsByCategory($category->id)) { |
|
throw new \DomainException('Unable to remove category with posts.'); |
|
} |
|
$this->categories->remove($category); |
|
} |
|
} |