Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Property Access

Property Access Laravel Package

symfony/property-access

Symfony PropertyAccess lets you read and write values on objects and arrays using a simple property path string notation. It supports nested access, getters/setters, and array indexes, making data mapping and form handling easier.

View on GitHub
Deep Wiki
Context7

Provides functions to read and write from/to an object or array using a simple string notation

Frequently asked questions about Property Access
How does Symfony PropertyAccess compare to Laravel’s `Arr::get()` or `data_get()` for object traversal?
Symfony PropertyAccess supports *both* arrays *and* objects with dot notation (e.g., `PropertyAccess::getValue($user, 'profile.name')`), while Laravel’s helpers focus on arrays. It’s ideal for DTOs or hybrid data structures where `Arr::get()` falls short. For pure arrays, `Arr::get()` remains lighter, but PropertyAccess adds getters/setters and nested object support.
Can I use this in Laravel without Symfony’s full framework?
Yes—it’s a standalone Composer package (`symfony/property-access`). Install it directly (`composer require symfony/property-access`) and wrap it in a Laravel facade (e.g., `Property::get()`) to hide Symfony’s syntax. No Symfony framework dependencies are required.
What Laravel versions and PHP versions does this support?
The package works with Laravel 8+ (PHP 7.4+) and PHP 8.4+ (for full feature support like enums). For PHP 7.4+, pin to `^6.4` to avoid modern features. Always check the [Symfony docs](https://symfony.com/doc/current/components/property_access.html) for version-specific notes.
How do I safely validate or sanitize property paths to prevent injection?
Use `PropertyPath::create()` to validate paths statically (e.g., `PropertyPath::create('user.profile')->getPropertyPath()`). For dynamic paths, whitelist allowed keys or use Laravel’s `Validator` with a custom rule. Avoid raw user input in paths—treat them like SQL queries.
Will this work with Eloquent models or should I avoid it?
Use it for *DTOs* or *value objects*, not Eloquent models directly. Eloquent already has optimized accessors/mutators. For example, avoid `PropertyAccess::set($user, 'name', 'John')`—instead, use `$user->name = 'John'` or a dedicated setter method.
How does performance compare to manual array/object traversal or reflection?
PropertyAccess uses reflection caching, adding ~10–20% overhead for hot paths (e.g., API payloads). For critical performance, benchmark against `Arr::get()` + manual methods. It’s optimized for convenience over raw speed—ideal for non-critical traversal like config or DTO mapping.
Can I integrate this with Laravel’s Validator for nested form fields?
Yes! Use dot notation in validation rules (e.g., `['user.address.city' => 'required']`). PropertyAccess bridges seamlessly with Symfony’s `Validator`, enabling dynamic nested validation. Example: `Validator::make($data, ['user.profile.email' => 'email'])`.
What’s the best way to test PropertyAccess in Laravel?
Mock the `PropertyAccessInterface` for unit tests. For integration tests, verify paths with known objects/arrays. Example: `PropertyAccess::getValue(new User(), 'profile.name')` should return `$user->profile->name`. Use `PropertyPath::create()` to test path validation separately.
Are there alternatives to PropertyAccess for Laravel?
For arrays, stick with `Arr::get()`/`data_get()`. For objects, consider `spatie/laravel-data` (DTOs) or `illuminate/support/Traits` (accessors). PropertyAccess stands out for its *hybrid* array/object support, Symfony integration, and path syntax flexibility—ideal if you need both.
How do I migrate from manual traversal (e.g., `$obj->prop->subprop`) to PropertyAccess?
Start with a facade (e.g., `Property::get($obj, 'prop.subprop')`) in non-critical modules. Use feature flags to toggle between old/new logic. Gradually replace manual chaining in DTOs, validators, and config systems. Document path syntax rules (e.g., `user.profile[0].name` for arrays).
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope
anil/file-picker
broqit/fields-ai