Validator#
Arokettu\ArithmeticParser\Validator
can be used to catch situations that are valid for the parser
but will definitely fail in calculator, namely:
Undefined variable. A list of available variables is unknown during parsing time
Undefined function. A list of functions may be not final during parsing time, this allows users to have dynamic functions if needed
Not enough arguments passed to a function. Same reasons, function list may be dynamic
Validator\Warning
#
Arokettu\ArithmeticParser\Validator\Warning
An object describing a validator warning. There are 3 warnings currently:
MissingVariablesWarning
MissingFunctionsWarning
MissingFunctionArgumentsWarning
<?php
use Arokettu\ArithmeticParser\Validator;
$warnings = Validator::validate(/* ... */);
foreach ($warnings as $warning) {
// check which warning is it
$funcsMissing = $warning instanceof Validator\MissingFunctionsWarning;
// get message describing the warning
$errorMessage = $warning->getMessage();
// convert to an exception
throw $warning->toException();
}
Methods#
Validator exposes several methods that do a single thing but tailored to different possible use semantics
Validator::validate()
#
Returns an array of Arokettu\ArithmeticParser\Validator\Warning
:
<?php
use Arokettu\ArithmeticParser\Config;
use Arokettu\ArithmeticParser\Parser;
use Arokettu\ArithmeticParser\Validator;
$config = Config::default();
$parsed = (new Parser($config))->parse('a + 1');
$warnings = Validator::validate($parsed, $config, ['a']);
$isValid = $warnings === [];
foreach ($warnings as $warning) {
// ...
}
Validator::isValid()
#
Returns a boolean, can optionally populate a list of warnings:
<?php
use Arokettu\ArithmeticParser\Config;
use Arokettu\ArithmeticParser\Parser;
use Arokettu\ArithmeticParser\Validator;
$config = Config::default();
$parsed = (new Parser($config))->parse('a + 1');
$isValid = Validator::isValid($parsed, $config, ['a'], $warnings);
foreach ($warnings as $warning) {
// ...
}
Validator::assertValid()
#
Throws an exception when the input is not valid:
<?php
declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
use Arokettu\ArithmeticParser\Config;
use Arokettu\ArithmeticParser\Exceptions\ValidationException;
use Arokettu\ArithmeticParser\Parser;
use Arokettu\ArithmeticParser\Validator;
$config = Config::default();
$parsed = (new Parser($config))->parse('a + 1');
try {
Validator::assertValid($parsed, $config, ['a']);
$isValid = true;
} catch (ValidationException $e) {
$isValid = false;
}