digitalshift/mailbox-form-bundle
Installation
Add the bundle to your composer.json:
composer require digitalshift/mailbox-form-bundle
Register the bundle in config/bundles.php:
return [
// ...
Digitalshift\MailboxFormBundle\DigitalshiftMailboxFormBundle::class => ['all' => true],
];
First Use Case Use the form type in a Symfony controller to create a mailbox form:
use Digitalshift\MailboxFormBundle\Form\Type\MailboxType;
use Symfony\Component\Form\FormFactoryInterface;
public function createMailboxAction(Request $request, FormFactoryInterface $formFactory)
{
$form = $formFactory->create(MailboxType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$mailboxData = $form->getData();
// Process mailbox data (e.g., save to database)
}
return $this->render('mailbox/create.html.twig', [
'form' => $form->createView(),
]);
}
Where to Look First
Digitalshift\MailboxFormBundle\Form\Type\MailboxType
Check its constructor and buildForm() method for customization options.config/packages/digitalshift_mailbox_form.yaml (if provided) for bundle defaults.digitalshift/mailbox-abstraction-bundle is installed and configured, as this bundle depends on it.Customizing the Form
Extend the MailboxType to add or override fields:
use Digitalshift\MailboxFormBundle\Form\Type\MailboxType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class CustomMailboxType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder->add('customField', TextType::class);
}
public function getParent()
{
return MailboxType::class;
}
}
Use the custom type in your controller or Twig template.
Integration with Abstraction Bundle Use the form to interact with the abstraction layer:
$mailboxService = $this->container->get('digitalshift_mailbox.abstraction.mailbox_service');
$mailbox = $mailboxService->createMailbox($mailboxData);
Validation and Data Processing Add validation constraints to form fields or process data post-submission:
$builder->add('email', EmailType::class, [
'constraints' => [
new NotBlank(),
new Email(),
],
]);
Dynamic Forms Use options to dynamically configure the form:
$form = $formFactory->create(MailboxType::class, null, [
'mailbox_type' => 'inbox', // Pass dynamic options
'csrf_protection' => false,
]);
{{ form_start(form) }} and {{ form_end(form) }} in templates.MailboxType directly if needed for reuse:
public function __construct(private MailboxType $mailboxType) {}
# config/services.yaml
services:
App\EventListener\MailboxFormListener:
tags:
- { name: kernel.event_listener, event: form.pre_set_data, method: onPreSetData, form: Digitalshift\MailboxFormBundle\Form\Type\MailboxType }
Missing Abstraction Bundle
digitalshift/mailbox-abstraction-bundle. Forgetting to install it will cause errors.composer require digitalshift/mailbox-abstraction-bundle
Form Data Mismatch
Mailbox entity or DTO). Use getData() carefully:
if ($form->isSubmitted() && $form->isValid()) {
$mailboxData = $form->getData(); // Returns an array or object
// Validate structure before processing
}
CSRF Protection
csrf_protection: false) may expose your form to attacks if not handled securely.Bundle Configuration
config/packages/digitalshift_mailbox_form.yaml./_profiler) to inspect form errors and submitted data.$this->logger->debug('Mailbox form data:', $form->getData());
$options = $form->getConfig()->getOptions();
$this->logger->debug('Form options:', $options);
Reuse Form Types Create a base form type for common fields and extend it:
class BaseMailboxType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('subject', TextType::class)
->add('body', TextareaType::class);
}
}
Translation Support Translate form labels/placeholders:
# config/packages/translation.yaml
frameworks:
translator:
paths:
- '%kernel.project_dir%/translations'
Add translations for form fields in translations/messages.en.yaml:
mailbox:
subject: 'Subject'
body: 'Message Body'
Testing Forms Test form submission in PHPUnit:
public function testMailboxFormSubmission()
{
$formData = [
'subject' => 'Test',
'body' => 'Hello',
];
$form = $this->factory->create(MailboxType::class);
$form->submit($formData);
$this->assertTrue($form->isSubmitted());
$this->assertTrue($form->isValid());
}
Extension Points
MailboxType to replace default field types (e.g., swap TextType for RichTextType).$builder->add('email', EmailType::class, [
'constraints' => [
new Length(['min' => 5, 'max' => 255]),
],
]);
$builder->addModelTransformer(new CallbackTransformer(
function ($mailbox) { return $mailbox->toArray(); },
function ($array) { return new Mailbox($array); }
));
How can I help you explore Laravel packages today?