/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.use ListFormControllerTrait;
ile Src\Traits\Controller\ListFormControllerTrait
davranışını ekliyoruz.<?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.