chrisharrison/php-array-of
A lightweight PHP helper for creating and working with typed “array of” value collections. Simplifies validation/coercion so arrays contain only the expected item type, improving safety and readability for DTOs, configs, and API payload handling.
Illuminate\Support\Arr and Validator handle some validation, this package provides explicit typed-array constraints (e.g., ArrayOf::of(User::class)), which are harder to express declaratively in Laravel’s native tools.Order::getItems() must return ArrayOf<OrderItem>).UserService only accepts ArrayOf<User>).ArrayOf\validate($request->input('items'), User::class)).Symfony\Component\Validator) for hybrid validation workflows.spatie/array-to-object, symfony/property-access) that offer similar functionality with active maintenance?ArrayOf::of(string::class | null))?array_filter + instanceof checks?$fillable, $casts, or Validator rules for arrays?hasMany relationships)?array_filter in FormRequest classes with ArrayOf::validate().spatie/laravel-data).ArrayOf::of(UserResource::class)).ArrayOf::of(User::class, ['strict' => true]);
public function test_user_array_validation() {
$valid = ArrayOf::of(User::class)->validate([new User, new User]);
$invalid = ArrayOf::of(User::class)->validate([new User, "invalid"]);
}
array_filter/instanceof checks.hasMany with typed collections).php-array-of and native validation during migration.Validator rules for hybrid validation:
use ArrayOf\ArrayOf;
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($data, [
'items' => ['required', function ($attribute, $value, $fail) {
if (!ArrayOf::of(User::class)->validate($value)) {
$fail('The '.$attribute.' must contain only User objects.');
}
}],
]);
OrderService::validateItems()).public function getItemsAttribute() {
return ArrayOf::of(Item::class)->validate($this->attributes['items'] ?? []);
}
array_filter/instanceof checks.ArrayOf::of(User::class) vs. array_filter($users, fn($u) => $u instanceof User))."Array at index 2 is not of type User"), but may need custom formatting for Laravel’s error pages.O(n)) for validation.How can I help you explore Laravel packages today?