Search code examples
phpsymfonysilexcustom-validators

Silex Custom Validator Registration


I created a custom validator that I want to use in Silex but i am getting the following error while trying to access it:

PHP Fatal error:  Class 'Sisu\\Validator\\Constraints\\ImeiValidator' 
not found in var/www/sisuwhitelabel/vendor/silex/silex/src/Silex/ConstraintValidatorFactory.php 
on line 85

My Constraint:

Imei.php

<?php
namespace Sisu\Validator\Constraints;

use Symfony\Component\Validator\Constraint;

class Imei extends Constraint
{
    public $message = "Here message";

    public function validateBy()
    {
        return get_class($this).'Validator';
    }
}

My Validator:

ImeiValidator.php

<?php

namespace Sisu\Validator;

use Silex\Application;
use Symfony\Component\Validator\ConstraintValidator;
use Symfony\Component\Validator\Constraint;

class ImeiValidator extends ConstraintValidator
{
    public function validate($value, Constraint $constraint)
    {
        $this->context->addViolation('Some message %s', 'Some Value');      
        return false;
    }
}

My Service Provider:

ImeiValidatorServiceProvider.php

<?php
namespace Sisu\Provider;

use Silex\Application;
use Silex\ServiceProviderInterface;
use Sisu\Validator\ImeiValidator;

class ImeiValidatorServiceProvider implements ServiceProviderInterface
{
    public function register(Application $app)
    {
        $app['validator.imei'] = $app->share(function($app) {
            $validator = new ImeiValidator();
            return $validator;
        });
    }

    public function boot(Application $app)
    {
    }
}

Registration call:

$app->register(new Sisu\Provider\ImeiValidatorServiceProvider());

and I am using it in the applicatin like this:

$form->add('productIdentifier', 'text', array(
                'required' => false,
                'constraints' => array(
                    new Imei(
                        array('message' => 'xxxxx')
                    )
)
);

Solution

  • I found the answer. The Constraint Imei and validator ImeiValidator should be in the same folder.

    More on the topic here:

    https://github.com/pix-art/Silex-Skeleton/tree/master/src/Constraint