Validator
Subsystém validátorů byl ve starších verzích PHP Jet pevnou součástí subsytému formulářů. Jak je zjevné podle názvu, tak slouží k validaci hodnot, ale na rozdíl od předchozí implementace v rámci formulářů je již plně samostatně použitelný, ale z hlediska architektury a logiky použití je subsystém validátorů formulářům velice podobný. Technicky vzato byla validace ze subsystému formulářů plně odstraněna a transformována v tento samostatně použitelný subsystém.
Základní přehled funkcí a možností validátorů
- Otevřený, rozšířitelný a modifikovatelný modulární subsystém (jako vše v PHP Jet :-) )
- Velká sada již připravených validátorů.
- Možnost přetěžovat připravené validátory pomocí továren.
- Možnost vytvářet libovolné vlastní validátory.
- Možnost namapovat validátory na libovolnou entitu (třídu) pomocí definic stejně jako ORM či subsystému formulářů.
Stručná ukázka použití.
Základní obecné použití
$tested_value = '#FFC6C6';
$validator = Factory_Validator::getValidatorInstance( Validator::TYPE_COLOR );
$validator->setIsRequired( true );
if($validator->validate( $tested_value )) {
echo 'Value is valid';
} else {
echo 'Value is NOT valid';
echo $validator->getLastErrorMessage();
}
Namapování validátoru přeímo na entitu - třídu
namespace JetApplication;
use Jet\BaseObject;
use Jet\Entity_Validator_Definition;
use Jet\Entity_Validator_Interface;
use Jet\Entity_Validator_Trait;
use Jet\Validator;
use Jet\Validator_Int;
class ExapleEntity extends BaseObject implements Entity_Validator_Interface
{
use Entity_Validator_Trait;
#[Entity_Validator_Definition(
type: Validator::TYPE_INT,
min_value: 10,
max_value: 999,
error_messages: [
Validator_Int::ERROR_CODE_OUT_OF_RANGE => 'Number is out of range (0-999)'
]
)]
protected int $int_property = 0;
public function getIntProperty(): int
{
return $this->int_property;
}
public function setIntProperty( int $int_property ): void
{
$this->int_property = $int_property;
}
}
$object = new ExapleEntity();
$object->setIntProperty( 10000 );
$validator = $object->createValidator();
if($validator->validate()) {
echo "OK - object is valid";
} else {
echo "Object is not valid<br><br>";
foreach( $validator->getErrors() as $property_path=>$validation_errors ) {
foreach( $validation_errors as $validation_error ) {
echo $property_path.': '.$validation_error->getMessage().'<br>';
}
}
}