PHP code example of indexzer0 / laravel-validation-provider
1. Go to this page and download the library: Download indexzer0/laravel-validation-provider 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/ */
indexzer0 / laravel-validation-provider example snippets
use IndexZer0\LaravelValidationProvider\Facades\ValidationProvider;
class AuthorValidationProvider extends AbstractValidationProvider
{
protected array $rules = ['name' => [' 'author' => [
AuthorValidationProvider::class,
new ArrayValidationProvider('books', new BookValidationProvider()),
],
]);
$validationProvider->rules();
// [
// 'author.name' => ['
class AddressValidationProvider extends AbstractValidationProvider
{
public function rules(): array
{
return [
'post_code' => [' public function attributes(): array { return []; }
}
use IndexZer0\LaravelValidationProvider\Facades\ValidationProvider;
$validationProvider = ValidationProvider::make([
'author' => [
AuthorValidationProvider::class,
new CustomValidationProvider(['books' => ['n:1', 'max:2'],
// 'author.books.*.title' => ['
$validationProvider = new NestedValidationProvider(
'author',
new AggregateValidationProvider(
new AuthorValidationProvider(),
new CustomValidationProvider(['books' => [' => ['
$validationProvider = (new BookValidationProvider())
->nestedArray('books')
->with(new CustomValidationProvider(['books' => ['=> ['
class StoreAddressRequest extends ValidationProviderFormRequest
{
public function prepareForValidation()
{
$this->validationProvider = new AddressValidationProvider();
}
}
// In a service provider.
$this->app->when(StoreAddressRequest::class)
->needs(ValidationProvider::class)
->give(AddressValidationProvider::class);
class StoreAddressRequest extends ValidationProviderFormRequest
{
public function __construct(ValidationProvider $validationProvider)
{
$this->validationProvider = $validationProvider;
}
}
class StoreAddressRequest extends YourOwnExistingFormRequest
{
use HasValidationProvider;
public function prepareForValidation()
{
$this->validationProvider = new AddressValidationProvider();
}
}
class AggregateValidationProvider extends AbstractValidationProvider {}
$validationProvider = new AggregateValidationProvider(
new AuthorValidationProvider(),
new BookValidationProvider(),
);
$validationProvider->rules();
// [
// 'name' => ['
class NestedValidationProvider extends AbstractValidationProvider {}
$validationProvider = new NestedValidationProvider(
'author',
new AuthorValidationProvider(),
);
$validationProvider->rules();
// [
// 'author.name' => ['
class ArrayValidationProvider extends NestedValidationProvider {}
$validationProvider = new ArrayValidationProvider('books', new BookValidationProvider());
$validationProvider->rules();
// [
// 'books.*.title' => ['
class ExcludeAttributesValidationProvider extends AbstractValidationProvider {}
$validationProvider = new ExcludeAttributesValidationProvider(
['one'],
new CustomValidationProvider([
'one' => ['
class MapAttributesValidationProvider extends AbstractValidationProvider {}
$validationProvider = new MapAttributesValidationProvider(
['one' => 'two'],
new CustomValidationProvider([
'one' => ['
// throws ValidationProviderExceptionInterface
try {
$validationProvider = ValidationProvider::make('This is an invalid fqcn string');
} catch (\IndexZer0\LaravelValidationProvider\Contracts\ValidationProviderExceptionInterface $exception) {
$exception->getMessage(); // Class must be a ValidationProvider
}
/*
* ------------------
* Address
* ------------------
*/
Route::post('address', StoreAddress::class);
class StoreAddress extends Controller
{
public function __invoke(StoreAddressRequest $request) {}
}
class StoreAddressRequest extends ValidationProviderFormRequest
{
public function prepareForValidation()
{
$this->validationProvider = new AddressValidationProvider();
}
}
/*
* ------------------
* Contact
* ------------------
*/
Route::post('contact-details', StoreContactDetails::class);
class StoreContactDetails extends Controller
{
public function __invoke(StoreContactDetailsRequest $request) {}
}
class StoreContactDetailsRequest extends ValidationProviderFormRequest
{
public function prepareForValidation()
{
$this->validationProvider = new ContactValidationProvider();
}
}
/*
* ------------------
* Profile
* ------------------
*/
Route::post('profile', StoreProfile::class);
class StoreProfile extends Controller
{
public function __invoke(StoreProfileRequest $request) {}
}
class StoreProfileRequest extends ValidationProviderFormRequest
{
public function prepareForValidation()
{
$this->validationProvider = ValidationProvider::make([
'profile' => [
'address' => AddressValidationProvider::class
'contact' => ContactValidationProvider::class
]
]);
}
}
class PriceRangeValidationProvider extends AbstractValidationProvider
{
public function rules(): array
{
return [
'min_price' => ["lt:{$this->dependentField('max_price')}"],
'max_price' => ["gt:{$this->dependentField('min_price')}"],
];
}
}
$validationProvider = new NestedValidationProvider(
'product',
new PriceRangeValidationProvider()
);
$validationProvider->rules();
// [
// "product.min_price" => [
// "lt:product.max_price"
// ]
// "product.max_price" => [
// "gt:product.min_price"
// ]
// ]
try {
$validationProvider = ValidationProvider::make('This is an invalid fqcn string');
} catch (\IndexZer0\LaravelValidationProvider\Contracts\ValidationProviderExceptionInterface $exception) {
$exception->getMessage(); // Class must be a ValidationProvider
} catch (\Throwable $t) {
// Shouldn't happen - but failsafe.
}
// Interface
interface ValidationProvider {}
// Validation Providers
abstract class AbstractValidationProvider implements ValidationProvider {}
class AggregateValidationProvider extends AbstractValidationProvider {}
class NestedValidationProvider extends AbstractValidationProvider {}
class ArrayValidationProvider extends NestedValidationProvider {}
class CustomValidationProvider extends AbstractValidationProvider {}
class ExcludeAttributesValidationProvider extends AbstractValidationProvider {}
class MapAttributesValidationProvider extends AbstractValidationProvider {}
// Form Request
class ValidationProviderFormRequest extends \Illuminate\Foundation\Http\FormRequest {}
trait HasValidationProvider {}
// Facade
class ValidationProvider extends \Illuminate\Support\Facades\Facade {}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.