PHP code example of ghaliano / easyadmin-grouping-bundle

1. Go to this page and download the library: Download ghaliano/easyadmin-grouping-bundle library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

ghaliano / easyadmin-grouping-bundle example snippets


return [
    // ...
    Ghaliano\EasyAdminGrouping\EasyAdminGroupingBundle::class => ['all' => true],
];

use Ghaliano\EasyAdminGrouping\Application\GroupingConfig;
use Ghaliano\EasyAdminGrouping\Infrastructure\EasyAdmin\GroupableCrudControllerTrait;
use Ghaliano\EasyAdminGrouping\Infrastructure\EasyAdmin\GroupingActionHelper;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;

class UserCrudController extends AbstractCrudController
{
    use GroupableCrudControllerTrait;

    public static function getEntityFqcn(): string
    {
        return User::class;
    }

    public function configureGrouping(): GroupingConfig
    {
        return GroupingConfig::create()
            ->groupByProperty('department.name', 'Department');
    }

    public function configureActions(Actions $actions): Actions
    {
        return $actions->add(
            Action::INDEX,
            GroupingActionHelper::groupedTableAction()
        );
    }
}

->groupByProperty('profession.name', 'Profession')

->groupByCallback(
    fn(User $u) => $u->isActive() ? 'Active' : 'Inactive',
    'Status'
)

return GroupingConfig::create()
    ->groupByProperty('department.name', 'Department')
    ->groupByCallback(fn(User $u) => $u->getStatus()->label(), 'Status');

$config->groupBy(new MyCustomStrategy());

return $actions
    ->add(Action::INDEX, GroupingActionHelper::groupedTableAction('By code', 'code'))
    ->add(Action::INDEX, GroupingActionHelper::groupedTableAction('By status', 'status'));

return $actions->add(Action::INDEX, GroupingActionHelper::groupedTableSelect([
    'code'   => 'By code',
    'status' => 'By status',
    'both'   => 'Code, then status',
], label: 'Group by'));

public function configureAssets(): Assets
{
    return Assets::new()
        ->addJsFile('bundles/easyadmingrouping/grouping-actions.js');
}

public function configureGrouping(): GroupingConfig
{
    $by = $this->container->get('request_stack')
        ->getCurrentRequest()
        ?->query->get('groupBy', 'code');

    $config = GroupingConfig::create();
    return match ($by) {
        'status' => $config->groupByCallback($byStatus, 'Status'),
        'both'   => $config->groupByCallback($byCode, 'Code')
                           ->groupByCallback($byStatus, 'Status'),
        default  => $config->groupByCallback($byCode, 'Code'),
    };
}

return GroupingConfig::create()
    ->groupByCallback($byCode, 'Code')
    ->disableSortFor(['code']);

php bin/console assets:install public --symlink