Skip to content

Commit

Permalink
minor #28606 [Validator] Add BC layer covering BicValidator without I…
Browse files Browse the repository at this point in the history
…ntl (chalasr)

This PR was merged into the 4.2-dev branch.

Discussion
----------

[Validator] Add BC layer covering BicValidator without Intl

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | no
| BC breaks?    | no
| Deprecations? | yes
| Tests pass?   | yes
| Fixed tickets | #28473 (review)
| License       | MIT
| Doc PR        | n/a

Commits
-------

10b8a5f [Validator] Add BC layer covering BicValidator without Intl
  • Loading branch information
fabpot committed Sep 30, 2018
2 parents deaf53c + 10b8a5f commit 91add60
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 6 deletions.
1 change: 1 addition & 0 deletions UPGRADE-4.2.md
Expand Up @@ -216,3 +216,4 @@ Validator
* The component is now decoupled from `symfony/translation` and uses `Symfony\Contracts\Translation\TranslatorInterface` instead
* The `ValidatorBuilderInterface` has been deprecated and `ValidatorBuilder` made final
* Deprecated validating instances of `\DateTimeInterface` in `DateTimeValidator`, `DateValidator` and `TimeValidator`. Use `Type` instead or remove the constraint if the underlying model is type hinted to `\DateTimeInterface` already.
* Using the `Bic` constraint without `symfony/intl` is deprecated
1 change: 1 addition & 0 deletions UPGRADE-5.0.md
Expand Up @@ -199,6 +199,7 @@ Validator
* The component is now decoupled from `symfony/translation` and uses `Symfony\Contracts\Translation\TranslatorInterface` instead
* The `ValidatorBuilderInterface` has been removed and `ValidatorBuilder` is now final
* Removed support for validating instances of `\DateTimeInterface` in `DateTimeValidator`, `DateValidator` and `TimeValidator`. Use `Type` instead or remove the constraint if the underlying model is type hinted to `\DateTimeInterface` already.
* The `symfony/intl` component is now required for using the `Bic` constraint

Workflow
--------
Expand Down
1 change: 1 addition & 0 deletions src/Symfony/Component/Validator/CHANGELOG.md
Expand Up @@ -10,6 +10,7 @@ CHANGELOG
* made `ValidatorBuilder` final
* marked `format` the default option in `DateTime` constraint
* deprecated validating instances of `\DateTimeInterface` in `DateTimeValidator`, `DateValidator` and `TimeValidator`.
* deprecated using the `Bic` constraint without `symfony/intl`

4.1.0
-----
Expand Down
12 changes: 12 additions & 0 deletions src/Symfony/Component/Validator/Constraints/Bic.php
Expand Up @@ -11,7 +11,9 @@

namespace Symfony\Component\Validator\Constraints;

use Symfony\Component\Intl\Intl;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Exception\LogicException;

/**
* @Annotation
Expand All @@ -36,4 +38,14 @@ class Bic extends Constraint
);

public $message = 'This is not a valid Business Identifier Code (BIC).';

public function __construct($options = null)
{
if (!class_exists(Intl::class)) {
// throw new LogicException(sprintf('The "symfony/intl" component is required to use the "%s" constraint.', __CLASS__));
@trigger_error(sprintf('Using the "%s" constraint without the "symfony/intl" component installed is deprecated since Symfony 4.2.', __CLASS__), E_USER_DEPRECATED);
}

parent::__construct($options);
}
}
12 changes: 6 additions & 6 deletions src/Symfony/Component/Validator/Constraints/BicValidator.php
Expand Up @@ -14,7 +14,6 @@
use Symfony\Component\Intl\Intl;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
use Symfony\Component\Validator\Exception\LogicException;
use Symfony\Component\Validator\Exception\UnexpectedTypeException;

/**
Expand Down Expand Up @@ -69,13 +68,14 @@ public function validate($value, Constraint $constraint)
return;
}

if (!class_exists(Intl::class)) {
throw new LogicException('The "symfony/intl" component is required to use the Bic constraint.');
// @deprecated since Symfony 4.2
if (class_exists(Intl::class)) {
$validCountryCode = isset(Intl::getRegionBundle()->getCountryNames()[substr($canonicalize, 4, 2)]);
} else {
$validCountryCode = ctype_alpha(substr($canonicalize, 4, 2));
}

// next 2 letters must be alphabetic (country code)
$countries = Intl::getRegionBundle()->getCountryNames();
if (!isset($countries[substr($canonicalize, 4, 2)])) {
if (!$validCountryCode) {
$this->context->buildViolation($constraint->message)
->setParameter('{{ value }}', $this->formatValue($value))
->setCode(Bic::INVALID_COUNTRY_CODE_ERROR)
Expand Down

0 comments on commit 91add60

Please sign in to comment.