Setup Backend Controller - MrAPPs-RSM/MrappsBackendBundle GitHub Wiki

Setup Backend Controller

Category Controller example

<?php

namespace ErbozetaBundle\Controller;

use ErbozetaBundle\Entity\Category;
use ErbozetaBundle\Entity\CategoryLang;
use Mrapps\BackendBundle\Annotation\Sidebar;
use Mrapps\BackendBundle\Classes\Utils as BackendUtils;
use Mrapps\BackendBundle\Controller\BaseBackendController;
use Mrapps\BackendBundle\Entity\TranslatedEntity;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;

/**
 * @Route("{_locale}/panel/category")
 * @Sidebar("categorie", label="Categorie", visible=true)
 */
class CategoryController
    extends BaseBackendController
{

attributes

    private $pageTitle = 'Manage Categories';

    private $tableColumns = [[
        'title'           => 'ID',
        'type'            => 'id',
        'name'            => 'id',
        'filterable'      => false,
        'sortable'        => false,
        'visible'         => true,
    ],...];

    private $defaultSorting = [
        'id' => 'asc'
    ];

    private $defaultFilter  = [];

    private $breadcrumb = [
        'type' => 'url',
        'url'  => 'asda'
    ];

Create new category

    /**
     * @Route("/new", name="app_backend_categorie_new")
     * @Method({"GET"})
     * @Sidebar(
     *      "new_categorie",
     *      label="Crea Categorie",
     *      parent="categorie",
     *      visible=true,
     *      weight=3,
     *      icon="icon-layers"
     * )
     */
    public function newAction(Request $request)
    {
        return $this->forward('MrappsBackendBundle:Default:__new', [
            'confirmSave'    => false,
            'create'         => false,
            'edit'           => true,
            'fields'         => $this->buildSimpleForm(),
            'linkBreadcrumb' => $this->breadcrumb,
            'linkEdit'       => $this->generateUrl('app_backend_categorie_edit'),
            'linkNew'        => $this->generateUrl('app_backend_categorie_new'),
            'linkSave'       => $this->generateUrl('app_backend_categorie_save'),
            'request'        => $request,
            'title'          => $this->pageTitle,
        ]);
    }

List all categories

    /**
     * @Route("/list", name="app_backend_categorie_list")
     * @Method({"GET"})
     * @Sidebar(
     *      "list_categorie",
     *      label="Elenco Categorie",
     *      parent="categorie",
     *      visible=true,
     *      weight=3,
     *      icon="icon-layers"
     * )
     */
    public function listAction(Request $request)
    {
        return $this->forward('MrappsBackendBundle:Default:__list', array(
            'defaultFilter'   => $this->defaultFilter,
            'defaultSorting'  => $this->defaultSorting,
            'linkAction'      => null,
            'linkBreadcrumb'  => $this->breadcrumb,
            'linkData'        => $this->generateUrl('app_backend_categorie_data'),
            'linkDelete'      => $this->generateUrl('app_backend_categorie_delete'),
            'linkEdit'        => $this->generateUrl('app_backend_categorie_edit'),
            'linkNew'         => null,
            'request'         => $request,
            'tableColumns'    => $this->tableColumns,
            'title'           => $this->pageTitle,
        ));
    }

Save action

    /**
     * @Route("/save", name="app_backend_categorie_save")
     * @Method({"POST"})
     */
    public function saveAction(Request $request);

Delete action

    /**
     * @Route("/delete", name="app_backend_categorie_delete")
     * @Method({"DELETE"})
     */
    public function removeAction(Request $request, $id = null);

Edit category

    /**
     * @Route("/edit/{id}", name="app_backend_categorie_edit")
     * @Method({"GET"})
     */
    public function editAction(
        Request $request,
        $id = null
    ) {
        $category = $this->getDoctrine()
            ->getManager()
            ->getRepository('ErbozetaBundle:Category')
            ->findOneBy([
                'id' => $id,
            ]);

        return $this->forward('MrappsBackendBundle:Default:__new', [
            'confirmSave'    => false,
            'create'         => false,
            'edit'           => true,
            'fields'         => $this->buildSimpleForm($category),
            'linkBreadcrumb' => $this->breadcrumb,
            'linkEdit'       => null,
            'linkNew'        => $this->generateUrl('app_backend_categorie_new'),
            'linkSave'       => $this->generateUrl('app_backend_categorie_save'),
            'request'        => $request,
            'title'          => $this->pageTitle,
        ]);
    }

Show item

    /**
     * @Route("/data", name="app_backend_categorie_data")
     * @Method({"GET"})
     */
    public function dataAction(Request $request){

    $filters = !empty($request->get('filter')) ? $request->get('filter') : [];
    $sorting = !empty($request->get('sorting')) ? $request->get('sorting') : [];

    $count = $this->get("mrapps.backend.entities_provider")
            ->setPrimaryEntityName('Bundle:Entity', 'e')
            ->setFilters($filters, 'e')
            ->setSorting($sorting, 'e')
            ->countResults();


    $data = $this->get("mrapps.backend.entities_provider")
            ->setLimit($request->get('count'))
            ->setPage($request->get('page'))
            ->getResult();

    ...

    return new JsonResponse(
            [
                "success" => true,
                "data" => [
                    "total" => $count,
                    "result" => $jsonResponse,
                ]
            ]
     );
}

End of class

}