memio/validator
A small PHP validation library built around a clear rule/constraint API. Define validators, combine rules, and validate values with detailed violation information. Lightweight and framework-agnostic, suitable for simple input checks and reusable domain validation.
Installation
composer require memio/validator
Ensure memio/validator is registered in config/app.php under providers.
Basic Usage Define a Memio Model (assumed to be a custom ORM/ODM layer):
use Memio\Model;
class User extends Model
{
protected $rules = [
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users',
'age' => 'nullable|integer|min:18|max:120',
];
}
Validate an instance:
$user = new User(['name' => 'John', 'email' => 'invalid-email']);
$validator = app('validator')->make($user->toArray(), $user->rules);
if ($validator->fails()) {
dd($validator->errors());
}
First Use Case Use in a controller to validate incoming requests:
use Memio\Validator\Facades\Validator;
public function store(Request $request)
{
$validated = Validator::make($request->all(), User::rules)->validate();
$user = User::create($validated);
return response()->json($user);
}
class Admin extends User
{
protected $rules = [
'role' => 'required|in:admin,superadmin',
];
}
protected $rules = [
'password' => function ($value, $attribute, $fail) {
if (strlen($value) < 8 && auth()->check()) {
$fail('Password must be at least 8 characters.');
}
},
];
FormRequest for API/HTTP validation:
use Memio\Validator\Rules\MemioRule;
public function rules()
{
return array_merge(parent::rules(), [
'custom_field' => [new MemioRule('required_if', 'active', true)],
]);
}
class UserService
{
public function validateUser(array $data)
{
return Validator::make($data, User::rules)->validate();
}
}
Memio\Validator\Rules\Rule for domain-specific logic:
namespace App\Rules;
use Memio\Validator\Rules\Rule;
class UniqueMemioId extends Rule
{
public function passes($attribute, $value)
{
return Model::where('id', $value)->doesntExist();
}
}
Use in model rules:
protected $rules = [
'id' => 'nullable|unique_memio_id',
];
$rules in static properties unless intentional.app('memio.validator')->make($data, Model::rules) for standalone validation.memio/validator to avoid collisions:
'aliases' => [
'MemioValidator' => Memio\Validator\Facades\Validator::class,
],
->validate() (throws ValidationException) or ->validateWithBag() for custom error bags.dd(app('memio.validator')->extend('custom_rule', function ($attribute, $value, $parameters) {
// Debug logic here
}));
resources/lang/en/validation.php with Memio-specific keys (e.g., memio_unique).trait HasCommonRules
{
public function commonRules()
{
return [
'slug' => 'required|slug|unique:posts,slug',
];
}
}
Merge in model:
protected $rules = $this->commonRules();
$rules = User::rules(); // Force load
Validator::make($data, $rules)->validate();
How can I help you explore Laravel packages today?