1. Go to this page and download the library: Download chanmix51/parameter-juicer library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use Chanmix51\ParameterJuicer\ParameterJuicer as Juicer;
use Chanmix51\ParameterJuicer\Exception\ValidationException;
$turn_to_integer = function($v):int { return (int) $v; };
$must_be_between_1_and_10 = function(int $value) {
if (10 < $value || 1 > $value) {
return sprintf(
"must be between 1 and 10 (%d given).",
$value
);
}};
$juicer = (new Juicer)
->addField('pika')
->addCleaner('pika', $turn_to_integer)
->addValidator('pika', $must_be_between_1_and_10)
->setDefaultValue('pika', 9) // ← when not set
->addField('chu')
->addCleaner('chu', function($v) { return trim($v); })
->setDefaultValue('chu', function() { return 10; })
// ↑ use a callable to have a lazy loaded default value
->addField('not mandatory', false) // ← not mandatory
->setStrategy(Juicer::STRATEGY_IGNORE_EXTRA_VALUES)
; // ↑ extra values are removed
try {
// ↓ return ["pika" => 9, "chu" => '']
$juicer->squash(['chu' => null, 'whatever' => 'a']);
// ↓ return ["pika" => 3, "chu" => "a"]
$juicer->squash(['pika' => '3', 'chu' => ' a ', 'whatever' => 'a']);
// ↓ throw a ValidationException because "chu" is mandatory
$juicer->squash(['pika' => '3', 'whatever' => 'a']);
} catch (ValidationException $e) {
// Get the validation errors from the exception (see below)
}
$juicer = (new Juicer)
->addField('login')
->addCleaner('login', function($v) { return strtolower(trim($v)); })
->addValidator('login', function($v) { return $v === '' ? 'must not be empty' : null; })
->addField('password')
->addCleaner('password', 'trim')
->addValidator('password', function($v) { return strlen($v) < 3 ? 'must not be less than 3 chars' : null; })
->addField('repeat_password')
->addCleaner('repeat_password', 'trim')
->addFormValidator(function($values) {
if ($values['password'] != $values['repeat_password']) {
return 'passwords do not match';
}
});
class PikaChuJuicer extends ParameterJuicer
{
public function __construct()
{
$this
->addField('pika')
->addCleaner('pika', [$this, 'doTrimAndLowerString'])
->addValidator('pika', [$this, 'mustNotBeEmptyString'])
->addField('chu', false)
->addCleaner('chu', function($v) { return $v + 0; })
->addValidator('chu', [$this, 'mustBeANumberStrictlyPositive'])
->setStrategy(ParameterJuicer::STRATEGY_REFUSE_EXTRA_VALUES)
;
}
public function doTrimAndLowerString($value): string
{
return strtolower(trim($value));
}
public function mustNotBeEmptyString($value)
{
return (strlen($value) !== 0) ? null : 'must no be an empty string';
}
public function mustBeANumberStrictlyPositive($value)
{
return ($value > 0)
? null
: printf("must be strictly positive (%f given)", $value);
}
}
$trusted_data = (new PikaChuJuicer)
->squash($untrusted_data)
;
$juicer = (new Juicer)
->addField('pokemon_id')
->addField('pika_chu')
->addJuicer(
'pika_chu', // ↓ change this juicer’s strategy
(new PikaChuJuicer)->setStrategy(Juicer::STRATEGY_IGNORE_EXTRA_VALUES)
)
->addValidator('pika_chu', … // ← add an extra validator on this field)
;
$juicer = (new ParameterJuicer)
->addField('my_form')
->addJuicer('my_form', (new PasswordFormJuicer)
->addValidator('my_form', function($val) {
return $values['pass'] === $values['repass']
? null
: 'pass & repass do not match';
});
try {
$clean_data = $juicer->squash(['my_form' => $form_data]);
} catch (ValidationException $e) {
…
}
$cleaner = function($value) {
$value = trim($value);
if ($value === '') {
throw new CleanerRemoveFieldException;
}
return $value;
}
$validator = function($value) {
if (preg_match("/pika/", $value)) {
throw new ValidationException("must NOT contain 'pika'");
}
}