Skip to main content

FormBuilderRequest

The FormBuilderRequest class is a generic FormRequest that automatically builds validation rules and attributes from a FormBuilder or Form definition using CustomField instances. It allows you to drive validation directly from your form builder configuration instead of manually writing rules in each request.

Namespace

JobMetric\Form\Http\Requests\FormBuilderRequest

Overview

FormBuilderRequest eliminates the need to manually write validation rules by automatically generating them from form field configurations. When a form field has validation rules defined, they are automatically included in the request validation.

Constructor

public function __construct(FormBuilder $formBuilder, bool $includeHiddenFields = true)

Parameters:

  • $formBuilder (FormBuilder): The form builder instance used to define the form
  • $includeHiddenFields (bool): Whether to include hidden fields in validation (default: true)

Available Methods

Set Form Builder

Set or update the form builder instance:

$request->setFormBuilder($formBuilder);

Parameters:

  • $formBuilder (FormBuilder): The form builder instance

Returns: static - Returns the request instance for method chaining

Include Hidden Fields

Configure whether hidden fields should be included in validation:

$request->includeHiddenFields(false);

Parameters:

  • $include (bool): Whether to include hidden fields (default: true)

Returns: static - Returns the request instance for method chaining

Rules

Automatically generates validation rules from form field configurations:

public function rules(): array
{
// Automatically generated from form fields
}

Returns: array - Validation rules array

Note: This method is automatically called by Laravel during request validation.

Attributes

Automatically generates attribute names from form field labels:

public function attributes(): array
{
// Automatically generated from form field labels
}

Returns: array - Attribute names array

Note: This method is automatically called by Laravel during request validation.

Basic Usage

In Controller

use JobMetric\Form\FormBuilder;
use JobMetric\Form\Http\Requests\FormBuilderRequest;

class UserController extends Controller
{
public function store(FormBuilderRequest $request)
{
// Validation is automatically handled
$validated = $request->validated();

// Create user
User::create($validated);
}
}

Setting Form Builder

use JobMetric\Form\FormBuilder;
use JobMetric\Form\Http\Requests\FormBuilderRequest;

class UserController extends Controller
{
public function create()
{
$formBuilder = FormBuilder::make()
->action('/users')
->method('POST')
->tab(function ($tab) {
$tab->id('personal')
->label('Personal Information')
->group(function ($group) {
$group->label('Basic Info')
->customField(function ($field) {
$field->text()
->name('name')
->label('Full Name')
->validation('required|string|max:255')
->build();
})
->customField(function ($field) {
$field->email()
->name('email')
->label('Email')
->validation('required|email|unique:users,email')
->build();
})
->build();
})
->build();
});

$request = new FormBuilderRequest($formBuilder);

return view('users.create', [
'form' => $formBuilder->build(),
'request' => $request,
]);
}

public function store(FormBuilderRequest $request)
{
$validated = $request->validated();
User::create($validated);
}
}

Complete Examples

Form with Validation Rules

$formBuilder = FormBuilder::make()
->action('/products')
->method('POST')
->tab(function ($tab) {
$tab->id('details')
->label('Product Details')
->group(function ($group) {
$group->label('Basic Information')
->customField(function ($field) {
$field->text()
->name('name')
->label('Product Name')
->validation('required|string|max:255')
->build();
})
->customField(function ($field) {
$field->number()
->name('price')
->label('Price')
->validation('required|numeric|min:0')
->build();
})
->customField(function ($field) {
$field->select()
->name('category_id')
->label('Category')
->validation('required|exists:categories,id')
->build();
})
->build();
})
->build();
});

$request = new FormBuilderRequest($formBuilder);

Excluding Hidden Fields

$formBuilder = FormBuilder::make()
->action('/orders')
->method('POST')
->hiddenCustomField(function ($field) {
$field->hidden()
->name('user_id')
->value(auth()->id())
->build();
})
->tab(function ($tab) {
$tab->id('details')
->label('Order Details')
->group(function ($group) {
$group->label('Information')
->customField(function ($field) {
$field->text()
->name('notes')
->label('Notes')
->validation('nullable|string|max:1000')
->build();
})
->build();
})
->build();
});

// Exclude hidden fields from validation
$request = new FormBuilderRequest($formBuilder, false);

When to Use FormBuilderRequest

Use FormBuilderRequest when you need to:

  • Automatic Validation: Generate validation rules from form definitions
  • DRY Principle: Avoid duplicating validation rules in requests
  • Consistency: Ensure validation matches form structure
  • Maintainability: Update validation by updating form definitions
  • Form-Driven Validation: Keep validation logic close to form definitions