besmartand-pro/graphqlite-symfony-validator-bridge
Bridge package connecting Symfony Validator with GraphQLite, enabling automatic validation of GraphQL input/arguments using Symfony constraints and returning structured validation errors in GraphQL responses. Suitable for Symfony apps using GraphQLite.
symfony/validator) makes integration feasible. The bridge abstracts Symfony-specific dependencies, reducing Laravel-specific friction.Validator facade) and Symfony components. The bridge can coexist with Laravel’s validation system, though redundancy may arise.ValidationException and convert it to GraphQL errors (e.g., using GraphQL\Error\FormattedError).ValidationError).Validator facade)? Avoid duplication or conflicts.symfony/validator, symfony/dependency-injection). Minimal additional setup required.Validator) and GraphQL validation layers.Prerequisites:
symfony/validator and besmartand-pro/graphqlite-symfony-validator-bridge via Composer.graphqlite/graphqlite-laravel package).Bridge Registration:
ValidatorBridge in Laravel’s service container (e.g., AppServiceProvider):
$this->app->bind(\Besmartand\GraphQLite\SymfonyValidatorBridge\ValidatorBridge::class, function ($app) {
return new \Besmartand\GraphQLite\SymfonyValidatorBridge\ValidatorBridge($app->make('validator'));
});
Schema Integration:
@Assert\Email) or define constraints in YAML.use GraphQL\Type\Definition\InputType;
use GraphQL\Type\Definition\Type;
use Besmartand\GraphQLite\SymfonyValidatorBridge\ValidatorBridge;
$inputType = new InputType([
'name' => 'UserInput',
'fields' => [
'email' => Type::string(),
'password' => Type::string(),
],
'validator' => function (ValidatorBridge $validator, array $input) {
return $validator->validate($input, [
'email' => 'required|email',
'password' => 'required|min:8',
]);
},
]);
Resolver Integration:
$validator = app(ValidatorBridge::class);
$errors = $validator->validate($args, ['email' => 'required|email']);
if ($errors) {
throw new \GraphQL\Error\ValidationError($errors);
}
Testing:
public function test_user_creation_validation()
{
$query = '
mutation CreateUser($input: UserInput!) {
createUser(input: $input) { id }
}
';
$variables = ['input' => ['email' => 'invalid-email']];
$response = $this->graphQL($query, $variables);
$response->assertValidationError('email', 'This value is not valid email.');
}
graphqlite/graphqlite-laravel).Phase 1: Proof of Concept
required, email).Phase 2: Critical Path Validation
Phase 3: Complex Types
Phase 4: Full Adoption
symfony/validator and the bridge package updated. Laravel’s dependency management tools (e.g., composer) simplify this.Log::error) to capture constraint failures.ValidationException).How can I help you explore Laravel packages today?