具有依赖性注入的Silex / Symfony2验证器

时间:2017-01-15 00:01:53

标签: php silex

好的,所以我想在DBAL连接上使用DI进行验证。我想出来是这样的:

约束

class UserExists extends Constraint
{
    public $message = 'Podany login "%string%" jest już zajęty.';

    public function validatedBy()
    {
       return 'validator.user.exists';
    }
}

验证

public $conn;

public function validate($value, Constraint $constraint)
{
    $sql = "SELECT count(1) AS liczba FROM uzytkownicy WHERE login= ? ";
    $exists = $this->conn->fetchAssoc($sql, array($value));  //this->conn is NULL

    if ($exists) {
        $this->context->buildViolation($constraint->message)
            ->setParameter('%string%', $value)
            ->addViolation();

            return false;
    }

    return true;
}

public function setConn(Connection $conn)
{
    $this->conn = $conn;
}

提供商

class UserExistsProvider implements ServiceProviderInterface
{
public function register(Application $app)
{   
    $app['validator.user.exists'] = $app->share(function ($app) {
        $validator =  new UserExistsValidator();
        $validator->setConn($app['db']);
        return $validator;
    });
}

public function boot(Application $app) {}
}

这就是我注册服务的方式:

$app->register(new UserExistsProvider());

$app->register(new Silex\Provider\ValidatorServiceProvider(array(
'validator.validator_service_ids' => array(
    'validator.user.exists' => $app['validator.user.exists']
     )
)));

所以当我在var_dump $ app ['validator.user.exists']中它有$ conn属性的正确初始值时,虽然在我的表单验证路径中我有这样的错误:

  

ConstraintValidatorFactory.php第46行中的ClassNotFoundException:   尝试从全局命名空间加载类“validator.user.exists”。   你忘记了“使用”声明吗?

我提到了$ conn属性,因为当我在约束中注释validatedBy()方法时,我可以初始化验证类,但$ conn属性为空。

0 个答案:

没有答案