b2pweb/bdf-form-bundle

Bundle for BDF Form

Installs: 1 348

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 3

Forks: 0

Open Issues: 0

Type:symfony-bundle

v1.1.2 2024-09-25 14:38 UTC

This package is auto-updated.

Last update: 2024-12-15 09:23:16 UTC


README

Bundle for BDF Form

build Packagist Version Total Downloads

Installation

composer require b2pweb/bdf-form-bundle

And then add to config/bundles.php :

<?php

return [
    // ...
    Bdf\Form\Bundle\FormBundle::class => ['all' => true],
];

Configuration

To enable auto registration of custom forms and builders, simply enable autoconfigure and load the package sources :

services:
    _defaults:
        autowire: true
        autoconfigure: true

    App\Form\:
        resource: './src/Form/*'

To use CSRF, do not forget to enable the CSRF service :

framework:
    csrf_protection:
        enabled: true

Usage

Simply use the container to instantiate the custom form.

Note: The container will automatically inject all dependencies

// Declare the form
class MyForm extends \Bdf\Form\Custom\CustomForm
{
    /**
     * @var MyService 
     */
    private $service;
    
    // You can declare dependencies on the constructor 
    public function __construct(MyService $service, ?\Bdf\Form\Aggregate\FormBuilderInterface $builder = null) 
    {
        parent::__construct($builder);
        
        $this->service = $service;
    }

    protected function configure(\Bdf\Form\Aggregate\FormBuilderInterface $builder) : void
    {
        // Configure fields
    }
}

// The controller
class MyController extends AbstractController
{
    public function save(Request $request)
    {
        // Create the form using the container
        $form = $this->container->get(MyForm::class);
        
        // Submit data
        if (!$form->submit($request->request->all())->valid()) {
            throw new FormError($form->error());
        }
        
        $this->service->save($form->value());
        
        return new Reponse('ok');
    }
}

With PHP 8 attributes

This bundle supports BDF Form attribute.

Install the library using composer :

composer require b2pweb/bdf-form-attribute

Add configuration into config/packages/form.yaml

form:
  attributes:
    compile: true # enable compilation of attributes to native PHP code
    configuratorClassPrefix: 'GeneratedForm\' # Define base namespace (or class prefix) for generated classes
    configuratorClassSuffix: 'Configurator' # Define generated classes suffix
    configuratorBasePath: '%kernel.build_dir%/form' # Define the save path

To disable code generation during development, set configuration config/packages/dev/form.yaml :

form:
  attributes:
    compile: false # disable compilation to build dynamically forms

Once configured, you can simply declare forms like example.