Installation
composer require alex-dwt/verified-request
Register the bundle in config/bundles.php (Symfony) or manually in AppServiceProvider (Laravel):
// Laravel (if not auto-discovered)
$this->app->register(AlexDwt\VerifiedRequestBundle\VerifiedRequestBundle::class);
First Use Case: Validating a Form Request Define a DTO (Data Transfer Object) class:
namespace App\DTO;
use AlexDwt\VerifiedRequestBundle\VerifiedRequest;
class LoginRequest extends VerifiedRequest
{
public $email;
public $password;
public function rules()
{
return [
'email' => 'required|email',
'password' => 'required|min:6',
];
}
}
Use it in a controller:
use App\DTO\LoginRequest;
public function login(LoginRequest $request)
{
// $request is now validated and populated
return response()->json(['success' => true]);
}
Key Files to Explore
src/VerifiedRequest.php: Core class for validation logic.config/packages/alex_dwt_verified_request.yaml: Configuration (if any).DTO-Centric Validation
CreateUserRequest, UpdateProfileRequest).VerifiedRequest and define rules() method using Symfony Validator constraints.Dependency Injection
VerifiedRequest objects automatically.public function store(CreateUserRequest $request) { ... }
Custom Validation Logic
validate() in DTO to add custom rules:
public function validate()
{
$this->addViolation('custom.error', ['field' => $this->field]);
}
Nested Objects
public $address; // Type-hinted as AddressRequest DTO
API Resource Integration
JsonResource for consistent API responses:
return new UserResource($this->userService->create($request));
FormRequest for hybrid validation:
public function rules()
{
return array_merge(
parent::rules(),
['csrf_token' => 'required']
);
}
public function handle($request, Closure $next)
{
$request->merge(new ApiRequest($request->all()));
return $next($request);
}
Missing rules() Method
rules() throws UndefinedMethodException.rules().Circular Dependencies
User → Address → User) cause infinite loops.Symfony Validator Conflicts
VerifiedRequest exclusively for DTOs.Case Sensitivity
rules() must match DTO properties exactly (e.g., $email vs $Email).$request->errors() for failed constraints.$validator = $this->getValidator();
$validator->setConstraintValidatorFactory(new DebugValidatorFactory());
Custom Constraints
$validator->addMapping(new ConstraintMapping([
new Assert\CustomConstraint() => ['property' => 'field'],
]));
Event Listeners
VerifiedRequest::VALIDATED event for post-validation logic:
event(new VerifiedRequestEvent($request));
Configuration
config/packages/alex_dwt_verified_request.yaml:
alex_dwt_verified_request:
strict_mode: true # Throws exceptions on validation failure
abstract class BaseRequest extends VerifiedRequest
{
public function commonRules() { ... }
public function rules() { return $this->commonRules(); }
}
VerifiedRequestTestCase for unit tests:
$request = new LoginRequest(['email' => '[email protected]']);
$this->assertTrue($request->isValid());
How can I help you explore Laravel packages today?