Download the PHP package optimistdigital/nova-dependency-container without Composer
On this page you can find all versions of the php package optimistdigital/nova-dependency-container. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download optimistdigital/nova-dependency-container
More information about optimistdigital/nova-dependency-container
Files in optimistdigital/nova-dependency-container
Package nova-dependency-container
Short Description A Laravel Nova field container allowing to depend on other fields values
License MIT
Informations about the package nova-dependency-container
Nova Dependency Container
This Laravel Nova package adds a container for grouping fields that depend on other fields' values.
Requirements
php: >=8.0
laravel/nova: ^4.0
Screenshots
Installation
Install the package in a Laravel Nova project via Composer:
Usage
- Add the
Outl1ne\DependencyContainer\HasDependencies
trait to your Nova Resource. - Add the
Outl1ne\DependencyContainer\DependencyContainer
field to your Nova Resource. - Add the
Outl1ne\DependencyContainer\ActionHasDependencies
trait to your Nova Actions that you wish to use dependencies on.
Dependencies
The package supports four kinds of dependencies:
->dependsOn('field', 'value')
->dependsOnNot('field', 'value')
->dependsOnEmpty('field')
->dependsOnNotEmpty('field')
->dependsOnNullOrZero('field')
These dependencies can be combined by chaining the methods on the DependencyContainer
:
The fields used as dependencies can be of any Laravel Nova field type. Currently only two relation field types are supported, BelongsTo
and MorphTo
.
Here is an example using a checkbox:
BelongsTo dependency
If we follow the example of a Post model belongsTo a User model, taken from Novas documentation BelongsTo, the dependency setup has the following construction.
We use the singular form of the belongsTo
resource in lower case, in this example Post
becomes post
. Then we define in dot notation, the property of the resource we want to depend on. In this example we just use the id
property, as in post.id
.
When the Post
resource with id
2 is being selected, a Boolean
field will appear.
BelongsToMany dependency
A BelongsToMany setup is similar to that of a BelongsTo.
The dependsOn
method should be pointing to the name of the intermediate table. If it is called role_user
, the setup should be
If the pivot field name occurs multiple times, consider using custom intermediate table models and define it in the appropiate model relation methods. The only reliable solution I found was using mutators to get/set a field which was being used multiple times. Although this may seem ugly, the events which should be fired on the intermediate model instance, when using an Observer, would work unreliable with every new release of Nova.
If Nova becomes reliable firing eloquent events on the intermediate table, I will update this examples with a more elegant approach using events instead.
Here is an (ugly) example of a get/set mutator setup for an intermediate table using a pivot field called type
.
And now for the dependency container.
MorphTo dependency
A similar example taken from Novas documentation for MorphTo is called commentable. It uses 3 Models; Comment
, Video
and Post
. Here Comment
has the morphable fields commentable_id
and commentable_type
For a MorphTo
dependency, the following construction is needed.
Commentable
becomes lower case commentable
and the value to depend on is the resource singular form. In this example the dependency container will add two additional fields, Additional Text
and Visible
, only when the Post
resource is selected.
License
This project is open-sourced software licensed under the MIT license.