بإستكمال درس سيمفوني للمبتدئين، يكون القارئ الكريم قد إستكمل فهم أساسيات سيمفوني، بما يشمل معرفة شجرة الملفات : الملف src حيث نضع تطبيقنا و كل العناصر الخاصة به. ثم الملف app/config حيث عناصر التهيئة. و الملف vendor حيث توجد المكتبات المثبة. ثم في الفصل السابق من هذا الدرس، قمنا بتثبيت و تهيئة نظام المستعملين فوس يوزر. و الملاحظ ان مجمل ما قمنا به يخص التهيئة.

في هذا الفصل، سنقوم بتثبيت بندل آخر يصلح لإدارة الموقع إسمة سوناتا ادمن Sonata admin و كما سترون، لن نحتاج للبرمجة بقدر ما سنحتاج للتهيئة. هذا البندل سيمكننا من بسرعة من الحصول على صفحات إدارة خاصة بالفئات التي عرفناها. مثلا الفئة Article التي عرفناها في الدرس الأول أو الفئة User في الفصل السابق من هذا الدرس. عمليا سنتوفر على نظام إدارة لإضافة و تحديث و حدف العناصر الموجودة في قاعدة البيانات.

 

  1. التثبيت

 

سنقوم بتثبيت عنصرين إثنين و ليس واحد، الاول يمثل نواة سوناتا و الثاني يرتبط بالنواة و يصلح في قواعد Mysql. بإستعمال موجه الأوامر

 

C:\xampp\htdocs\symf3>composer require sonata-project/admin-bundle

و البندل الثاني

 

C:\xampp\htdocs\symf3>composer require sonata-project/doctrine-orm-admin-bundle

 

  1. تفعيل sonata admin

 

لتفعيل sonata admin داخل تطبيقنا نقوم بتحديث الملف app\AppKernel.php بإضافة لائحة البندل المتعلق بسوناطا الى جانب البنادل الموجودة مسبقا كما يلي:

 

    //
    
    public function registerBundles()
    {
        $bundles = [
            //
            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
            new Sonata\CoreBundle\SonataCoreBundle(),
            new Sonata\BlockBundle\SonataBlockBundle(),
            new Knp\Bundle\MenuBundle\KnpMenuBundle(),
            new Sonata\DoctrineORMAdminBundle\SonataDoctrineORMAdminBundle(),
            new Sonata\AdminBundle\SonataAdminBundle(),
            //
        ];
   //

 

  1. التهيئة

نقوم بتحديث الملف app/config/config.yml بإضافة ما يلي:

 

sonata_block:
    default_contexts: [cms]
    blocks:
        sonata.admin.block.admin_list:
            contexts: [admin]

 

  1. إستقدام لائحة العناوين

 

نقوم إذن بتحديث الملف app\config\routing.yml بإضافة ما يلي :

 

admin_area:
    resource: "@SonataAdminBundle/Resources/config/routing/sonata_admin.xml"
    prefix: /admin

_sonata_admin:
    resource: .
    type: sonata_admin
    prefix: /admin

 

  1. نتحقق من ان كل شيء على ما يرام

 

نتحقق من مسح الملفات المؤقتة

 

php bin/console cache:clear
php bin/console assets:install

 

بإمكانكم طلب الصفحة ( الفارغة ) للإدارة على العنوان http://localhost/symf3/web/app_dev.php/admin

لا تنسو أن في ملف app/config/security.yml وضعنا فايروول لا يسمح للمرور للصفحات admin/ إلا للمسجلين بدور ادمن. تستطيعون تعليقها مؤقتا و إلا ستكونون ملزمين بالتسجل للتمكن من ولوج الادمن.

 

    access_control:
        - { path: ^/admin, roles: ROLE_ADMIN }

 

  1. مثال خلق فئة ادمن

 

سنخلق فئة ادمن مخصصة للفئة Article. لذلك يجب خلق ملف AppBundle داخل البندل ثم نخلق الملف src\AppBundle\Admin\ArticleAdmin.php

 

namespace AppBundle\Admin;

use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;

class ArticleAdmin extends AbstractAdmin
{
    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper->add('title', 'text');
    }

    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
    {
        $datagridMapper->add('title');
    }

    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper->addIdentifier('title');
    }
}

 

بالطبع يجب إضافة مختلف الخاصيات للإستمارة ( و ليس فقط title كما فعلنا اعلاه)

ثم نضيف الخدمة الى الملف app\config\services.yml

 

services:
    admin.article:
        class: AppBundle\Admin\ArticleAdmin
        arguments: [~, AppBundle\Entity\Article, ~]
        tags:
            - { name: sonata.admin, manager_type: orm, label: Article }

 

عودوا للصفحة http://localhost/symf3/web/app_dev.php/admin من المفترض ان تروا ظهور الفئة Article في واجهة الإدارة. بالطبع، بإمكانكم فعل نفس الشيء لباقي الفئات بما فيها الفئة User

 

للإشارة، بالإمكان إضافة plug-in لسوناتا إدمن للحصول على محرر غني للنصوص، مثلا بإضافة الplug-in المسمى CKeditor نحصل على لوحة التحرير هذه.