agence-adeliom/easy-block-bundle

A Symfony bundle for EasyAdmin that provide basic blocks components

2.0.122 2024-05-29 09:45 UTC

README

Adeliom Quality gate

Easy Block Bundle

Provide a basic block component for Easyadmin.

Features

  • A Easyadmin CRUD interface to manage block
  • Twig function to render block

Versions

Installation with Symfony Flex

Add our recipes endpoint

{
  "extra": {
    "symfony": {
      "endpoint": [
        "https://api.github.com/repos/agence-adeliom/symfony-recipes/contents/index.json?ref=flex/main",
        ...
        "flex://defaults"
      ],
      "allow-contrib": true
    }
  }
}

Install with composer

composer require agence-adeliom/easy-block-bundle

Setup database

Using doctrine migrations

php bin/console doctrine:migration:diff
php bin/console doctrine:migration:migrate

Without

php bin/console doctrine:schema:update --force

Documentation

Integration into EasyAdmin

Go to your dashboard controller, example : src/Controller/Admin/DashboardController.php

<?php

namespace App\Controller\Admin;

...
use App\Entity\EasyFaq\Entry;
use App\Entity\EasyFaq\Category;

class DashboardController extends AbstractDashboardController
{
    ...
    public function configureMenuItems(): iterable
    {
        ...
        yield MenuItem::linkToCrud('easy.block.admin.menu.shared_blocks', 'fa fa-file-alt', Block::class);

        ...

Usage

Entity

class Article
{
    /**
     * @ORM\ManyToOne(targetEntity=Block::class)
     * @ORM\JoinColumn(nullable=false)
     */
    private $block;
}

CRUD Controller

class ArticleCrudController extends AbstractCrudController
{
    public function configureFields(string $pageName): iterable
    {
        yield AssociationField::new('block');
    }
}

Twig template

# block is an entity object
{{ easy_block(block) }}

# render with extra data
{{ easy_block(block, extra) }}

# render by key
{{ easy_block(key, extra) }}

Create a new type

bin/console make:block:shared

Events

easy_block.render_block

use Symfony\Contracts\EventDispatcher\Event;

$dispatcher->addListener('easy_block.render_block', function (Event $event) {
    // will be executed when the easy_block.render_block event is dispatched
    
    // Get
    $block = $event->getArgument('block');
    $blockType = $event->getArgument('blockType');
    $settings = $event->getArgument('settings');
    
    // Set
    $event->setArgument("block", $block);
    $event->setArgument("blockType", $blockType);
    $event->setArgument("settings", $settings);
});

License

MIT

Authors