گام 9: راهاندازی پشت صحنهی مدیریتی
راهاندازی پشت صحنهی مدیریتی¶
وظیفه مدیران پروژه، افزودن کنفرانسهای آینده به پایگاهداده است. پشت صحنهی مدیریتی، یک قسمت محافظتشده در وبسایت است که مدیران پروژه میتوانند دادههای وبسایت را مدیریت کرده، ارسال بازخوردها را تعدیل نموده و وظایفِ متعدد دیگری را انجام دهند.
چگونه میتوانیم این بخش را به سرعت ایجاد کنیم؟ به کمک یک باندل که قادر به تولید پشت صحنهی مدیریتی بر اساس مدل پروژه است. باندل EasyAdmin کاملاً برای این کار مناسب می باشد.
پیکربندی EasyAdmin¶
ابتدا EasyAdmin را به عنوان وابستگی به پروژه اضافه نمایید:
1 | $ symfony composer req "admin:^2"
|
برای پیکربندی EasyAdmin، یک فایل پیکربندی جدید توسط سیمفونی Flex (بر اساس recipe مربوط به باندل) تولید شده است:
1 2 3 4 5 6 | #easy_admin:
# entities:
# # List the entity class name you want to manage
# - App\Entity\Product
# - App\Entity\Category
# - App\Entity\User
|
تقریباً تمام بستهها مانند این بسته، دارای یک فایل پیکربندی در پوشهی config/packages/
هستند. اکثر اوقات، پیشفرضها با دقت زیاد و به نحوی انتخاب شدهاند که برای بیشتر اپلیکیشنها کار کنند.
قسمت اول خطوط را از حالت کامنت خارج کرده و کلاسهای مدل پروژه را به آن بیافزایید:
1 2 3 4 | easy_admin:
entities:
- App\Entity\Conference
- App\Entity\Comment
|
وارد پشت صحنهی مدیریتی ایجادشده که در آدرس /admin
قرار دارد، بشوید. واو! یک رابط کاربری زیبا و پرامکانات برای کنفرانسها و کامنتها:

نکته
چرا پشت صحنهی مدیریتی از مسیر /admin
قابل دستیابی میباشد؟ این پیشوند پیشفرض است که در پوشه config/routes/easy_admin.yaml
پیکربندی شده است:
1 2 3 4 | easy_admin_bundle:
resource: '@EasyAdminBundle/Controller/EasyAdminController.php'
prefix: /admin
type: annotation
|
شما میتوانید آن را به هرمسیری که مایلید تغییر دهید.
البته افزودن کنفرانسها و کامنتها هنوز امکانپذیر نیست و با خطایی به این شکل مواجه خواهید شد: Object of class App\Entity\Conference could not be converted to string
. باندل EasyAdmin تلاش میکند تا کنفرانس را به کامنتها مرتبط سازد اما این کار تنها در صورتی امکانپذیر است که یک نمایش رشتهای (string representation) از کنفرانس موجود باشد. این مشکل را با افزودن متد __toString()
به کلاس Conference
رفع کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | --- a/src/Entity/Conference.php
+++ b/src/Entity/Conference.php
@@ -44,6 +44,11 @@ class Conference
$this->comments = new ArrayCollection();
}
+ public function __toString(): string
+ {
+ return $this->city.' '.$this->year;
+ }
+
public function getId(): ?int
{
return $this->id;
|
همین کار را برای کلاس Comment
انجام دهید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | --- a/src/Entity/Comment.php
+++ b/src/Entity/Comment.php
@@ -48,6 +48,11 @@ class Comment
*/
private $photoFilename;
+ public function __toString(): string
+ {
+ return (string) $this->getEmail();
+ }
+
public function getId(): ?int
{
return $this->id;
|
شما اکنون از طریق پشت صحنهی مدیریتی می توانید کنفرانسها را به طور مستقیم اضافه کرده، تغییر داده و یا حذف نمایید. کمی با آن بازی کنید و حداقل یک کنفرانس اضافه نمایید.

تعدادی نظر بدون عکس اضافه کنید. فعلاً تاریخ را به صورت دستی تنظیم کنید؛ در گام بعدی، ستون createdAt
را به صورت خودکار پر میکنیم.

شخصیسازی EasyAdmin¶
پشت صحنهی مدیریتی پیشفرض به خوبی کار میکند، اما میتواند به راههای مختلفی شخصیسازی گردد تا تجربهی بهتری را منتقل نماید. بیایید تعدادی تغییر ساده ایجاد کنیم تا امکانات موجود نشان داده شود. پیکربندی موجود را با این موارد جایگزین نمایید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | easy_admin:
site_name: Conference Guestbook
design:
menu:
- { route: 'homepage', label: 'Back to the website', icon: 'home' }
- { entity: 'Conference', label: 'Conferences', icon: 'map-marker' }
- { entity: 'Comment', label: 'Comments', icon: 'comments' }
entities:
Conference:
class: App\Entity\Conference
Comment:
class: App\Entity\Comment
list:
fields:
- author
- { property: 'email', type: 'email' }
- { property: 'createdAt', type: 'datetime' }
sort: ['createdAt', 'ASC']
filters: ['conference']
edit:
fields:
- { property: 'conference' }
- { property: 'createdAt', type: datetime, type_options: { disabled: true } }
- 'author'
- { property: 'email', type: 'email' }
- text
|
ما بخش design
را بازنویسی کردیم تا به گزینههای درون منو، آیکون و یک لینک بازگشت به صفحهی اصلی اضافه شود.
برای بخش Comment
، لیست کردن فیلدها به ما اجازه میدهد تا آنها را به شکل دلخواه مرتب کنیم. تعدادی از فیلدها اصلاح شدهاند، مثلاً تاریخ ایجاد (creation date) به صورت فقط-خواندنی (read-only) در آمده است. بخش filters
، تعریف میکند که چه فیلترهایی باید در بالای یک فیلد جستجوی معمولی قرار گیرد.

این شخصیسازیها تنها بخش کوچکی از امکاناتی که EasyAdmin در اختیار میگذارد را معرفی میکنند.
کمی با بخش مدیریت بازی کنید، کامنتها را بر اساس کنفرانس فیلتر کنید، یا مثلاً کامنتها را بر اساس رایانامه جستجو کنید. تنها مشکل این است که هر کسی میتواند به پشت صحنه مدیریتی دسترسی پیدا کند. نگران نباشید، ما در گام آتی آن را امن خواهیم نمود.
1 | $ symfony run psql -c "TRUNCATE conference RESTART IDENTITY CASCADE"
|
- « Previous گام 8: توصیف ساختار داده
- Next » گام 10: ساخت رابط کاربری
This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.