Installation
composer require bodaclick/enquiry-bundle
Add to config/bundles.php:
return [
// ...
Bodaclick\EnquiryBundle\BDKEnquiryBundle::class => ['all' => true],
];
Publish Configuration
php artisan vendor:publish --tag=bdkenquiry-config
Review config/bdkenquiry.php for default settings (e.g., default_entity, validation_rules).
First Use Case: Basic Enquiry Form
Define an entity (e.g., ContactRequest) with fields like name, email, message.
Use the bundle’s EnquiryType form builder:
use Bodaclick\EnquiryBundle\Form\Type\EnquiryType;
$builder->add('contact', EnquiryType::class, [
'entity' => ContactRequest::class,
'validation_groups' => ['Default', 'contact'],
]);
Dynamic Form Handling
EnquiryType to auto-generate forms for any entity. Map fields via annotations or YAML:
# config/bdkenquiry/entities/ContactRequest.yml
fields:
name: { label: "Full Name", required: true }
email: { type: "email", required: true }
message: { type: "textarea" }
Entity Integration
Enquiry entity or create custom ones (e.g., SupportTicket):
use Bodaclick\EnquiryBundle\Entity\Enquiry;
class SupportTicket extends Enquiry {
// Custom fields/methods
}
config/bdkenquiry.php:
'entities' => [
'support_ticket' => SupportTicket::class,
],
Validation & Processing
// In your controller
$enquiry = $form->getData();
$validator = $this->get('validator');
$errors = $validator->validate($enquiry, ['contact', 'Default']);
enquiry.pre_save, enquiry.post_save) for custom logic:
$dispatcher->addListener('enquiry.pre_save', function ($enquiry) {
$enquiry->setStatus('pending');
});
API/CLI Access
curl -X POST /api/enquiries \
-d '{"entity":"contact","data":{"name":"John"}}'
EnquiryManager service:
$manager = $this->get('bdkenquiry.manager');
$enquiry = $manager->create('contact', $data);
$manager->save($enquiry);
Entity Mapping Issues
fields are defined in YAML/annotations or use MappingBuilder:
$builder->mapEntityFields(ContactRequest::class);
Validation Overrides
EnquiryType:
'validation_groups' => ['Default', 'contact', 'custom_group']
Event Dispatching
config/bdkenquiry.php:
'events' => [
'enquiry.pre_save' => 10, // Lower = earlier
],
Archived Status
$dispatcher->addListener('enquiry.pre_save', function ($enquiry) {
\Log::debug('Enquiry data:', $enquiry->toArray());
});
yaml component to validate config:
php bin/console debug:config bdkenquiry
Custom Field Types
Override EnquiryType to add new field types:
class CustomEnquiryType extends EnquiryType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('custom_field', CustomFieldType::class);
}
}
Database Drivers
Extend EnquiryStorage to support non-DOCTRINE DBAL:
class CustomStorage extends EnquiryStorage {
public function save(Enquiry $enquiry) {
// Custom logic
}
}
Email Notifications
Subscribe to enquiry.post_save and send emails:
$dispatcher->addListener('enquiry.post_save', function ($enquiry) {
$this->get('mailer')->send(new EnquiryEmail($enquiry));
});
config/bdkenquiry.php to avoid hardcoding:
'default_entity' => 'App\Entity\ContactRequest',
fields:
terms_accepted: { type: "checkbox", required: true }
How can I help you explore Laravel packages today?