যারা বাংলাদেশের ৩৬ তম Zend Certified Engineer এবং এই সাইট (w3programmers) এর স্বত্বাধিকারী এবং লেখক Masud Alam স্যার এর কাছে কাছে সপ্তাহে ২ দিন ক্লাস, ৬ দিন প্রাকটিস করতে চান তাদের জন্য আগামী ১ February 2018 (বৃহস্পতি এবং শুক্রবার সন্ধ্যা ৬:০০ টা রাত ৯:০০ টা) থেকে শুরু হতে যাচ্ছে ৫ মাস ব্যাপী Professional Web Design & Development With HTML, CSS, JAVASCRIPT, JQUERY, PHP & MySQL for Beginners কোর্স (এই কোর্স টি যারা ফ্রিল্যান্সিং এবং আউটসোর্সিং কাজে আগ্রহী বিশেষ ভাবে তাদের জন্য design করা হয়েছে। ), আগামী ৪ February 2018 ( রবি এবং মঙ্গলবার সন্ধ্যা ৬:০০ টা থেকে রাত ৯:০০ টা ) থেকে শুরু হতে যাচ্ছে ৪ মাস ব্যাপী Zend Certified PHP 7.1 Engineering কোর্স। যেটা Advance PHP কোর্স নামে পরিচিত । এবং ৫ February 2018 (সোম এবং বুধবার সন্ধ্যা ৬:০০ টা থেকে রাত ৯:০০ টা) থেকে শুরু হতে যাচ্ছে ৪ মাস ব্যাপী Laravel 5.5 Professional Beginning to Advance Course কোর্স ।এই কোর্স গুলোতে তিনি ছাত্রদের কে সপ্তাহে ২ দিন ৩ ঘন্টা করে ৬ ঘন্টা ক্লাস নিবেন , এবং শনি থেকে বৃহস্পতি সপ্তাহে ৬ দিন ই স্যার এর অফিসে বসে প্রাকটিস করার সুযোগ দিবেন ! এতে প্রাকটিস করা কালীন ছাত্র-ছাত্রীরা কোনো সমস্যায় পড়লে তাৎক্ষণিক স্যার এর সহযোগিতা পাবে . (উল্লেখ্য: Training গুলো স্যার তার techbeeo software company'r পাশাপাশি পরিচালনা করে থাকেন।) কোর্স গুলো সম্পর্কে বিস্তারিত জানতে পারবেন এই লিংকে : Course Details .কোর্স গুলোর প্রত্যেকটির ফী নির্ধারণ করা হয়েছে ৩০,০০০ টাকা। আগ্রহীদেরকে অতিসত্বর মাসুদ আলম স্যার এর সাথে যোগাযোগ করার জন্য অনুরোধ করা যাচ্ছে। স্যার এর মোবাইল নম্বর : ০১৭২২ ৮১ ৭৫ ৯১

SonataAdminBundle of Symfony2

What is Sonata Admin Bundle?
SonataAdminBundle helps you manage your data using a graphic interface that will let you create, update or search your model’s instances. It is the second most essential bundle of Symfony2 development.

First thing first. Let’s create a project for our tutorial in sadmin folder.


$composer create-project symfony/framework-standard-edition sadmin/

Now tell composer to install sonata admin bundle—


$ composer require sonata-project/admin-bundle

We need to install one more bundle for our tutorial –


$ composer require sonata-project/doctrine-orm-admin-bundle

Add the following bundle information in our app/AppKernel.php

// Add your dependencies
        new Sonata\CoreBundle\SonataCoreBundle(),
        new Sonata\BlockBundle\SonataBlockBundle(),
        new Knp\Bundle\MenuBundle\KnpMenuBundle(),
        //...

        // If you haven't already, add the storage bundle
        // This example uses SonataDoctrineORMAdmin but
        // it works the same with the alternatives
        new Sonata\DoctrineORMAdminBundle\SonataDoctrineORMAdminBundle(),

        // Then add SonataAdminBundle
        new Sonata\AdminBundle\SonataAdminBundle(),

Add the configuration to app/config/config.yml


sonata_block:
default_contexts: [cms]
blocks:
# Enable the SonataAdminBundle block
sonata.admin.block.admin_list:
contexts: [admin]
# Your other blocks

Now, install the assets from the bundles:


php app/console assets:install web

Add your routing in app/config/routing.yml


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

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

Now go to –

http://localhost/sadmin/web/app_dev.php/admin/dashboard

You should see –

Sonata deshboard

If you see any error clear your cash and log by following command –


$ rm -rf app/cache/*
$ rm -rf app/logs/*

Let’s create a CMS bundle.


$ php app/console generate:bundle --namespace=Custom/CMSBundle

Create an Admin class as src/Custom/CMSBundle/Admin/PostAdmin.php

<?php

namespace Custom\CMSBundle\Admin;

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

class PostAdmin extends Admin
{
    
    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->add('title', 'text', array('label' => 'Post Title'))
            ->add('author', 'text', array('label' => 'Author'))
            ->add('body') 
            ->add('slug', 'text', array('label' => 'Slug'))
        ;
    }

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

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

Now configure Custom/CMSBundle/Resources/config/admin.yml


services:
sonata.admin.post:
class: Custom\CMSBundle\Admin\PostAdmin
tags:
- { name: sonata.admin, manager_type: orm, group: "Content", label: "Post" }
arguments:
- ~
- Custom\CMSBundle\Entity\Post
- ~
calls:
- [ setTranslationDomain, [CustomCMSBundle]]

Now configure app/config/config.yml


imports:
- { resource: @CustomCMSBundle/Resources/config/admin.yml }

Load this bundle in Custom/CMSBundle/DependencyInjection/CustomCMSExtension.php

public function load(array $configs, ContainerBuilder $container)
    {
        //…

        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
        $loader->load('admin.yml');
    }

And don’t forget to uncomment app/config/config.yml


translator: { fallbacks: ["%locale%"] }

Now go to your dash board again –

http://localhost/sadmin/web/app_dev.php/admin/dashboard

admin bundle with content block

We are done with our admin panel.

To change the upper left corner icon and title –


$ php app/console assets:install

And add the title and logo in app/config/config.yml


sonata_admin:
title: Custom CMS Bundle
title_logo: bundles/customcms/images/tiger5043.png

Now let’s create a post entity for our blog from command prompt.

The entity will have following four fields –
1. title
2. author
3. body
4. slug

Let’s do it –


$ php app/console doctrine:generate:entity

Now update your schema so that the table is created –


$ php app/console doctrine:schema:update --force

Now see the magic.

Click on Add New link in your dashboard –

CRUD with SonataAdminBundle

Can you remember we have not created any controller and view for our application? We have only created entity. Rest of post operations are handled by SonataAdminBundle.

Source code available in git — Download Source Code

Spend some time with this admin panel to check the magic of it.

Happy coding … 🙂

SonataAdminBundle of Symfony2

Hej, I’m from Bangladesh. Learning programming is one of the freaking decisions I have taken in my life. Because, it makes me and my life crazy. I have great weakness on open source technologies. Perhaps, that’s why I do not know any closed source language. I fall in love with programming, when I started my undergraduate in East West University. Till now, I can not live without it.

One comment on “SonataAdminBundle of Symfony2

Leave a Reply

Your email address will not be published. Required fields are marked *