choros/polish-extensions-bundle
Install via Composer (recommended):
composer require taveo/polish-extensions-bundle:dev-master
Note: The package is in dev-master; pin a specific commit if stability is critical.
Enable the Bundle in app/AppKernel.php:
public function registerBundles()
{
return [
// ...
new Taveo\PolishExtensionsBundle\TaveoPolishExtensionsBundle(),
];
}
First Use Case: Validate a PESEL Annotate a property in your entity:
use Taveo\PolishExtensionsBundle\Validator\Constraints as TaveoAssert;
class User
{
/**
* @TaveoAssert\PESEL
*/
private $pesel;
}
Symfony’s validator will now automatically validate PESEL format (11 digits, checksum, date plausibility).
Form Validation Bind constraints to form fields (Symfony 2.x style):
$builder->add('nip', 'text', [
'constraints' => [
new TaveoAssert\NIP(),
],
]);
Programmatic Validation Use the validator directly in services/controllers:
$validator = $this->get('validator');
$errors = $validator->validate($entity, [
new TaveoAssert\REGON(),
]);
Custom Error Messages
Override translations in config/validator/validation.yml:
Taveo\PolishExtensionsBundle\Validator\Constraints\PESEL:
message: "Invalid PESEL. Must be 11 digits with valid checksum."
Dynamic Validation
Combine with Symfony’s Callback constraint for runtime checks:
use Symfony\Component\Validator\Constraints\Callback;
$constraint = new Callback([
'callback' => [$this, 'validateDynamicPesel'],
]);
@Assert\Valid on entity relationships.ValidatorBuilder to inject constraints into existing validators.Bundle Compatibility
symfony/validator directly if needed).Validation Logic Quirks
minYear/maxYear options if needed).1234567890 fails; must include - or space, e.g., 123-456-78-90).Translation Overrides
Resources/translations/validators.pl.yml. Override all languages (pl/en/de) to avoid missing keys.# config.yml
framework:
validation:
cache: false # Disable cache to see raw errors
getName() on constraints to match translations:
$constraint = new TaveoAssert\NIP();
echo $constraint->getName(); // "Taveo\PolishExtensionsBundle\Validator\Constraints\NIP"
Custom Constraints
Extend AbstractPolishConstraint to add new validators (e.g., KRS):
class KRS extends AbstractPolishConstraint
{
protected function validateRegex($value) {
return preg_match('/^[0-9]{10}$/', $value);
}
}
Event Listeners
Hook into validator.build_constraint to modify constraints dynamically:
// src/AcmeBundle/EventListener/ValidatorListener.php
public function onBuildValidator(FilterValidatorEvent $event) {
$constraints = $event->getConstraintMap();
$constraints['Acme\Entity'][] = new TaveoAssert\REGON(['strict' => true]);
$event->setConstraintMap($constraints);
}
Testing Mock constraints in PHPUnit:
$validator = $this->getMockBuilder('Taveo\PolishExtensionsBundle\Validator\Constraints\PESEL')
->disableOriginalConstructor()
->getMock();
How can I help you explore Laravel packages today?