1. Go to this page and download the library: Download jkbennemann/laravel-foliage 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/ */
$rule = Rule::single(SampleRule::class, ['name' => 'John Doe']);
$node = $rule->node();
//payload constructed during your application's request lifecycle.
$payload = [
'name' => 'John Doe'
];
//manual instantiation
//returns `Result` object
$foliage = new Foliage($validator, $treeBuilder);
$result = $foliage->validateSilently($node, $payload); // does not throw an exception on error
$foliage->validate($node, $payload); // throws exception on error
//using Facade
//returns `Result` object
$result = \Jkbennemann\Foliage\Facades\Foliage::validate($node, $payload)
$result->isValid(); //true
$result->errors(); //empty collection
$validator = new TreeValidator(new ValidationDataBuilder(), new PostOrderEvaluator());
$validator->withoutExceptions();
$isValid = $validator->evaluate($node, $payload);
$errors = $validator->errors();
$validator->evaluate($node, $payload)
use Jkbennemann\Foliage\Validator\Contracts\BaseValidator;
$validator = app(BaseValidator::class);
$validator->withoutExceptions();
$validator->withExceptions();
declare(strict_types=1);
namespace App\Services\BusinessRequirements\Rules;
use Jkbennemann\Foliage\Core\BaseValidationRule;
use Jkbennemann\Foliage\Core\Payload\BaseValidationPayload;
use Jkbennemann\Foliage\Exceptions\RuleValidation;
class SampleRule extends BaseValidationRule
{
/** @throws RuleValidation */
protected function validation(BaseValidationPayload $payload): void
{
//your implementation
}
protected function key(): string
{
return 'sample';
}
protected function inverseValidationException(BaseValidationPayload $payload): RuleValidation
{
throw new RuleValidation($this, 'error_message', $payload, 'custom_key');
}
}
declare(strict_types=1);
namespace App\Services\BusinessRequirements\Payloads;
use Jkbennemann\Foliage\Core\Payload\BaseValidationPayload;
class AvailabilityPayload extends BaseValidationPayload
{
public function __construct(
) {
}
}
public function __construct(public \Illuminate\Support\Carbon $date) {}
class SampleRule extends BaseValidationRule
{
/**
* @param AvailabilityPayload $payload
* @throws RuleValidation
*/
protected function validation(BaseValidationPayload $payload): void
{
$ruleSettings = $this->settings();
$dateNeeded = $ruleSettings['until'];
if ($payload->date->lt($dateNeeded)) {
return;
}
throw new \Jkbennemann\Foliage\Exceptions\RuleValidation($this, 'Not available', $payload);
}
//..
public function payloadObjectClass(): string
{
return AvailabilityPayload::class;
}
}