- What is guava/filament-nested-resources used for?
- It is a Filament v3 plugin that adds nested resource routing and management to Laravel admin panels. You define parent-child resource pairs and it generates parent-bound URLs in the shape /{parent}/{child}, such as /projects/{project}/tasks, along with slugs, breadcrumbs, and parent-aware record resolution. It decorates Filament's existing resource layer rather than replacing it, so each child resource opts in individually. It is intended for admin-facing nested management, not for modeling public-facing nested URLs.
- How do I install filament-nested-resources in a Laravel Filament panel?
- Install it with Composer, publish the package config tag, and register the plugin in your panel provider. Then add the NestedResource trait to each child resource and declare getParentResource() and getParentResourceRelationship(). Set $shouldRegisterNavigation to false on the child resource so it does not appear as a top-level item.
- Which Laravel and Filament versions does this package support?
- The package targets Filament v3 only and is a non-starter for other stacks. Confirm your panel is on v3 and pin the package alongside an explicit Filament constraint in composer.json so a transitive Filament bump cannot surprise you. Check the declared version matrix for 1.3.0 before adopting, and treat Filament majors as the primary breaking vector since the plugin sits close to Filament's resource and route contracts.
- How do I define a parent-child relationship for a nested Filament resource?
- Use the NestedResource trait plus two static declarations: getParentResource() and getParentResourceRelationship(). The relationship name you declare must match a genuine Eloquent relationship on the child model, because mismatches fail at runtime rather than at review time. Once those are in place, the plugin generates the parent-bound routes and resolves records within the parent context automatically.
- Does filament-nested-resources handle authorization for nested records?
- Relationship scoping prevents access to a child record through the wrong parent, but that is not a policy check, and teams often assume it substitutes for one. You still need policies covering the child resource and, ideally, parent-scoped authorization. Verify whether child policies receive or resolve the parent record, and whether parent-scoped authorization can be enforced without bespoke query code.
- What breaks when I upgrade Filament or this package?
- Release 1.3.0 is a single breadcrumb improvement with no indicated breaking changes, so that upgrade is close to free. The real risk is Filament majors, since nested route registration depends on Filament's resource and route contracts. Smoke-test any resource that overrides getBreadcrumb() or ships a custom panel theme, because overrides bypass the new defaults. Also confirm that generated route names and the {parent}/{child} URL shape stay stable across minor releases.
- Do getUrl() links to child records still work with nested resources?
- Every inbound link to a child record must now carry its parent, so getUrl() call sites need auditing. Look at widgets, notifications, custom actions, and global search result URLs in particular. If route names or the URL shape change in a future release, saved bookmarks and outbound notification links can break silently. Budget this URL audit as part of adoption, not as an afterthought.
- Does this plugin support multi-tenant Filament panels?
- It is not clearly documented whether the plugin tenant-scopes the parent or whether you must do that yourself. Confirm this explicitly before relying on it in a multi-tenant panel. The safest approach is to verify parent scoping under your own tenant model and test cross-tenant access attempts, rather than assuming the plugin covers it.
- How much effort does it take to adopt in a production panel?
- Install cost is trivial, but plan for roughly one to two engineer-days for a first production pair. The work is the information architecture and authorization modeling, plus auditing every getUrl() call site that links to a child record. Adoption is additive and scoped per resource pair with no schema migration, so a single pair can be piloted and reversed by removing the trait.
- What are the alternatives, and when should I fork or replace filament-nested-resources?
- You can hand-roll nested routes and breadcrumbs in Filament, but you would be reimplementing parent-aware record resolution and URL generation yourself. It is also not a substitute for public-facing nested URLs, which are a separate product and SEO decision. Because this is a community plugin with effectively no downstream ecosystem, decide up front what event triggers a fork, vendor, or replacement and who owns that call. Also define where plugin behavior ends and your own conventions begin for breadcrumbs, global search, and slug resolution.