arturdoruch/flash-message-bundle
Installation
composer require arturdoruch/flash-message-bundle
Register the bundle in config/bundles.php (Symfony 4+):
return [
// ...
ArturDoruch\FlashMessageBundle\ArturDoruchFlashMessageBundle::class => ['all' => true],
];
First Use Case In a controller, inject the flash service and set a success message:
use Symfony\Component\HttpFoundation\Request;
public function createAction(Request $request)
{
$flash = $this->get('ad_flash_message');
$flash->setSuccess(); // Auto-generates translation ID based on controller/action
return $this->redirectToRoute('home');
}
Display in Twig
Add this to your base template (e.g., base.html.twig):
{{ ad_flash_messages() }}
Standard Flash Messages
Use setSuccess(), setError(), or setNotice() for common cases:
$flash->setSuccess('User created successfully');
$flash->setError('Failed to save user');
CRUD Operations Leverage auto-generated translations for entities:
$flash->addCrudSuccess($user); // "User {name} was updated."
$flash->addCrudError($product, 'Bundle'); // "Failed to create Product Bundle."
Custom Types
Define new types in config/packages/artur_doruch_flash_message.yaml:
artur_doruch_flash_message:
classes:
warning: 'alert-warning'
info: 'alert-info'
Use in controller:
$flash->set('warning', 'This is a warning');
Translation Domains
Override default messages domain for specific contexts:
$flash->setSuccess(null, [], 'validation'); // Uses `validation` translation domain
API/JSON Responses Return flash messages directly without storing in session:
return new JsonResponse([
'message' => $flash->getSuccess('User saved')
]);
if ($form->isSubmitted() && !$form->isValid()) {
$flash->setError('Invalid data');
return $this->redirectToRoute('edit', ['id' => $id]);
}
$flash = $this->container->get('ad_flash_message');
$flash->setNotice('Resource updated');
Translation IDs
$message is null, the bundle auto-generates IDs like bundle.controller.action.type.app_demo_user.create.success).translations/messages.en.yaml or use explicit messages.Session Dependency
Flash messages rely on the session. For APIs or CLI commands, use get() instead of set()/add():
$message = $flash->getSuccess(); // No session storage
Overwriting Messages
set() replaces all messages of a type, while add() appends.add() for multiple messages (e.g., validation errors).Entity Auto-Detection
addCrud(), if $item is null and $entity is an object, it calls $entity->getName().getName() doesn’t exist, $item will be null in translations.$item explicitly or implement getName().CSS Classes
success, error, notice) map to Bootstrap classes.<div class="{{ ad_flash_messages_class_name('custom') }}">{{ message }}</div>
Missing Translations
translations/messages.en.yaml or crudMessages.en.yaml for missing keys.$flash->set('error', 'Raw error message', [], null); // $domain = null
Flash Messages Not Displaying
{{ ad_flash_messages() }} is in the template after the redirect.config/bundles.php.CRUD Messages
crud.{action}.{type} (e.g., crud.update.success).$flash->addCrudSuccess($entity);
error_log($flash->getCrudSuccess($entity)); // Check the output
Custom Twig Functions
Override the default messages.html.twig in templates/bundles/arturdoruchflashmessage/messages.html.twig:
{% for type, messages in ad_flash_messages() %}
{% for message in messages %}
<div class="alert alert-{{ type }} custom-style">
{{ message }}
</div>
{% endfor %}
{% endfor %}
Service Extensions
Extend the flash service in your bundle’s services.yaml:
services:
app.flash_extension:
class: App\Service\FlashExtension
arguments: ['@ad_flash_message']
tags: [kernel.event_subscriber]
Translation Overrides
Override bundle translations in translations/crudMessages.en.yaml:
crud:
update:
success: "The {entity} '{item}' was updated successfully."
Dynamic Message Types Add logic to the service by extending the class:
use ArturDoruch\FlashMessageBundle\FlashMessageManager;
class CustomFlashManager extends FlashMessageManager {
public function setInfo($message) {
$this->set('info', $message);
}
}
Register the service in services.yaml:
services:
ad_flash_message:
class: App\Service\CustomFlashManager
public: true
How can I help you explore Laravel packages today?