Installation
composer require dyosis/crud-bundle
Add to config/bundles.php:
Dyosis\CrudBundle\DyosisCrudBundle::class => ['all' => true],
First Use Case
Generate a basic CRUD for an existing User entity:
php bin/console dyosis:crud:generate User
This creates:
src/Controller/UserCrudController.php)templates/crud/user/)config/routes/crud.yaml)Where to Look First
php bin/console list dyosis (lists all available commands)templates/crud/ for customizable templatesconfig/packages/dyosis_crud.yaml (if it exists)Entity-First CRUD
# Generate CRUD for a new entity
php bin/console make:entity Post --fields="name:string title:string"
php bin/console dyosis:crud:generate Post
Customizing Templates Override default Twig templates by copying files from:
vendor/dyosis/crud-bundle/Resources/views/crud/
to:
templates/crud/
Route Configuration
Edit config/routes/crud.yaml to customize paths:
dyosis_crud_user:
path: /admin/users
controller: App\Controller\UserCrudController
Field-Specific Customization Use annotations in your entity to tweak CRUD behavior:
use Dyosis\CrudBundle\Annotation\Crud;
/**
* @Crud\Column(type="hidden")
*/
private $createdAt;
public function bulkDeleteAction(Request $request)
{
$ids = $request->request->get('ids');
// Custom logic
}
api-platform by generating API resources alongside CRUD:
php bin/console make:entity Post --api
php bin/console dyosis:crud:generate Post
Entity Naming Conflicts
Crud, Bundle) as entity names—generates malformed class names.Template Overrides Not Loading
templates/crud/ is in your Twig loader path (check config/packages/twig.yaml).php bin/console cache:clear
Field Type Mismatches
JsonType) may break.Route Cache Issues
crud.yaml, routes may not update until:
php bin/console router:debug | grep dyosis
php bin/console cache:clear
var/cache/dev/ for compiled Twig templates or dump the controller:
dump($this->get('dyosis.crud.generator')->generate(User::class));
APP_ENV=dev php bin/console dyosis:crud:generate User
php bin/console make:migration
php bin/console doctrine:migrations:migrate
Custom Controllers
Override the default controller by specifying a custom class in crud.yaml:
dyosis_crud_user:
controller: App\Controller\CustomUserCrudController
Event Listeners
Subscribe to CRUD events (e.g., CrudEntityCreatedEvent) in services.yaml:
services:
App\EventListener\CrudListener:
tags:
- { name: kernel.event_listener, event: dyosis.crud.entity.created, method: onEntityCreated }
Field Transformers
Extend Dyosis\CrudBundle\Form\Type\CrudFieldType to add custom field logic:
class CustomFieldType extends CrudFieldType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(['custom_option' => true]);
}
}
Register it in services.yaml:
Dyosis\CrudBundle\Form\Type\CrudFieldType:
alias: app.custom_crud_field_type
public: true
Authorization Use Symfony’s voter system to restrict CRUD actions:
// src/Voter/CrudVoter.php
public function supports(string $attribute, $subject): bool
{
return $attribute === 'EDIT' && $subject instanceof User;
}
Tag the voter in services.yaml:
App\Voter\CrudVoter:
tags: [voter]
How can I help you explore Laravel packages today?