Edior Blog Yönetim Ekranı

/admin/blog yolu ile blog yönetim ekranına ulaağımız için App\Controller\Admin\BlogController kontrolcü sınıfını oluşturmamız gerekiyor.
App/Controller dizini için Admin/ dizini oluşturup, içinde App\Controller\AdminController sınıfından türeyen BlogController oluşturuyoruz.
Oluşturduğumuz sınıf içinde use ListFormControllerTrait; ile Src\Traits\Controller\ListFormControllerTrait davranışını ekliyoruz.
ListFormControllerTrait davranışının gerektirdiği metodları tanımlıyoruz. Bu konuda şu yazıya bakabilirsiniz.
Son durumda BlogController sınıfı şu şekildedir:
<?php

namespace App\Controller\Admin;

use App\Controller\AdminController;
use App\Entity\Blog;
use CoreDB\Kernel\Model;
use Src\Entity\Translation;
use Src\Traits\Controller\ListFormControllerTrait;

class BlogController extends AdminController
{
    use ListFormControllerTrait;

    /**
     * Arama yapılacak model sınıfı
     */
    protected function getModelClass(): string
    {
        return Blog::class;
    }
    /**
     * Ekleme ekranında sayfa başlığı
     */
    protected function getAddTitle(): string
    {
        return Translation::getTranslation("add_new_entity", [
            Translation::getTranslation("blog")
        ]);
    }
    /**
     * Güncelleme ekranında sayfa başlığı
     * Düzenlenen nesnenin özellikleri kullanılabili
     */
    protected function getUpdateTitle(Model $model): string
    {
        return Translation::getTranslation("edit") . " | " . $model->title;
    }
}

Sonrasında App\Entity\Blog sınıfının actions() ve editUrl() metodlarını bu kontrolcüyü işaret edecek şekilde değiştiriyoruz. Son durumda Blog sınıfı şu şekildedir:

<?php

namespace App\Entity;

use App\Controller\Admin\BlogController;
use CoreDB\Kernel\Model;
use CoreDB\Kernel\Database\DataType\ShortText;
use CoreDB\Kernel\Database\DataType\LongText;
use CoreDB\Kernel\Database\DataType\Checkbox;
use CoreDB\Kernel\Database\SelectQueryPreparerAbstract;
use Src\Entity\Translation;
use Src\Views\Link;
use Src\Views\TextElement;

/**
 * Object relation with table blog
 * @author mbakiyucel
 */

class Blog extends Model
{
    /**
     * @var ShortText $title
     * Blog başlığı
     */
    public ShortText $title;
    /**
     * @var LongText $body
     * Blog içeriğinin HTML'i
     */
    public LongText $body;
    /**
     * @var Checkbox $published
     * Blog yayında mı?
     */
    public Checkbox $published;

    /**
     * @inheritdoc
     */
    public static function getTableName(): string
    {
        return "blog";
    }

    public function getResultHeaders(bool $translateLabel = true): array
    {
        $headers = parent::getResultHeaders($translateLabel);
        unset($headers["body"]);
        return $headers;
    }

    public function getResultQuery(): SelectQueryPreparerAbstract
    {
        return \CoreDB::database()->select(self::getTableName(), "b")
            ->select("b", [
                "ID as edit_actions", // edit_actions düzenleme ve silme butonları için gereklidir.
                "ID",
                "title",
                "published",
                "created_at",
                "last_updated"
            ]);
    }

    public function actions(): array
    {
        return [
            Link::create(
                BlogController::getUrl() . "add",
                TextElement::create(
                    "<span class='fa fa-plus'></span> " .
                    Translation::getTranslation("add_new_entity", [
                        Translation::getTranslation("blog")
                    ])
                )->setIsRaw(true)
            )->addClass("btn btn-sm btn-primary")
        ];
    }

    public function editUrl($value = null)
    {
        return BlogController::getUrl() . ($value ?: $this->ID);
    }
}

Bu sayfaya Admin ve Editor rolüne sahip kullanıcıların erişmesi için yan panele link ekliyoruz.

Link başlığının okunabilir görünmesi için manage_blog için çeviri ekliyoruz.

Yan panel ekranından eklediğimiz linki sıralıyoruz:

Yan paneldeki Blogları yönet ekranına tıkladığımızda daha önceki Varlıklar -> Blog ekranındaki gibi bir arama formunu görebiliriz. Buradan yeni bir kayıt ekleyebiliriz, varolan kayıtları güncelleyebiliriz ya da kayıtları silebiliriz.
Bu ekrana Editor rolüne sahip kullanıcı ile de erişebilriz.