Installation
Run composer require coka/input-handler-bundle in your Laravel project (or Symfony if adapted). No additional configuration is required for basic usage.
First Use Case Use the bundle to validate incoming request data with custom constraints. For example, in a Laravel controller:
use Coka\InputHandlerBundle\Validator\Constraints as InputAssert;
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => [
'required',
new InputAssert\EmailFormat(), // Custom constraint
],
]);
if ($validator->fails()) {
return response()->json(['errors' => $validator->errors()], 422);
}
}
Where to Look First
src/Validator/Constraints for built-in constraints like EmailFormat, PhoneNumber, or CustomRegex.config/packages/coka_input_handler.yaml (if available).Request Validation
Integrate constraints into Laravel’s built-in Validator:
$validator = Validator::make($data, [
'field' => new InputAssert\CustomConstraint(),
]);
Custom Constraints Extend existing constraints or create new ones:
namespace App\Validator\Constraints;
use Coka\InputHandlerBundle\Validator\Constraints\AbstractConstraint;
class CustomConstraint extends AbstractConstraint
{
protected function validate($value, Constraint $constraint)
{
return $value === 'expected';
}
}
API Responses Format validation errors for API responses:
if ($validator->fails()) {
return response()->json([
'success' => false,
'errors' => $validator->errors()->toArray(),
], 422);
}
Form Requests
Use in FormRequest classes for reusable validation:
public function rules()
{
return [
'username' => ['required', new InputAssert\UsernameFormat()],
];
}
Validator component.Validator::extend('custom_constraint', function ($attribute, $value, $parameters) {
return app()->make(\App\Validator\Constraints\CustomConstraint::class)
->validate($value, new Constraint());
});
$validator = Validator::make($data, ['field' => new InputAssert\MockConstraint()]);
Constraint Registration
composer.json).Performance
Error Messages
$validator->extend('custom_constraint', function ($attribute, $value, $parameters, $validator) {
$validator->errors()->add($attribute, 'Custom error message.');
});
Bundle Maturity
dd($constraint) to inspect passed parameters or values during validation.validator.error events (Symfony) to debug constraint failures:
$validator->addListener('validator.error', function ($event) {
\Log::debug('Validation error:', [$event->getConstraint(), $event->getValue()]);
});
Add Custom Constraints
Extend AbstractConstraint and place in app/Validator/Constraints (or a custom namespace).
Override Default Constraints
Replace bundle constraints by publishing config (if available) or overriding classes in app/.
API Error Formatting
Create a custom AppServiceProvider to standardize error responses:
Validator::after(function ($validator) {
if ($validator->fails()) {
response()->json(['errors' => $validator->errors()], 422)->send();
}
});
Localization Translate constraint messages via Laravel’s localization system:
'validation.custom_constraint' => 'The :attribute must meet custom rules.',
How can I help you explore Laravel packages today?