PHPackages                             iamgerwin/nova-dependency-container - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [PSR &amp; Standards](/categories/psr-standards)
4. /
5. iamgerwin/nova-dependency-container

ActiveLibrary[PSR &amp; Standards](/categories/psr-standards)

iamgerwin/nova-dependency-container
===================================

A Laravel Nova 4 and 5 field container allowing to depend on other fields values

1.0.16(5mo ago)0743↓35.7%1MITVuePHP ^8.3|^8.4|^8.5CI passing

Since Sep 25Pushed 5mo agoCompare

[ Source](https://github.com/iamgerwin/nova-dependency-container)[ Packagist](https://packagist.org/packages/iamgerwin/nova-dependency-container)[ Docs](https://github.com/iamgerwin/nova-dependency-container)[ RSS](/packages/iamgerwin-nova-dependency-container/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (11)Versions (16)Used By (0)

Nova Dependency Container
=========================

[](#nova-dependency-container)

[![Latest Version on Packagist](https://camo.githubusercontent.com/d9b4e3972e68d3ae59c78533482e9651d5f00790371549562a080bf6fe40f752/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f69616d67657277696e2f6e6f76612d646570656e64656e63792d636f6e7461696e65722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/iamgerwin/nova-dependency-container)[![GitHub Tests Action Status](https://camo.githubusercontent.com/5324ab94cf900d445c8f1f85d342f2282b2b1a91a6ec4a372640f776b165e929/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f69616d67657277696e2f6e6f76612d646570656e64656e63792d636f6e7461696e65722f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/iamgerwin/nova-dependency-container/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/abb29cb00696cc41c7e5990eddadc914fe851f7ec73a0ac561885b68b085f477/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f69616d67657277696e2f6e6f76612d646570656e64656e63792d636f6e7461696e65722f6669782d7068702d636f64652d7374796c652d6973737565732e796d6c3f6272616e63683d6d61696e266c6162656c3d636f64652532307374796c65267374796c653d666c61742d737175617265)](https://github.com/iamgerwin/nova-dependency-container/actions?query=workflow%3A%22Fix+PHP+code+style+issues%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/f80cef2eab198cce15ebc6efffe977cd27d333be4dd68c63fe61489a541551e5/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f69616d67657277696e2f6e6f76612d646570656e64656e63792d636f6e7461696e65722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/iamgerwin/nova-dependency-container)

A Laravel Nova field container allowing fields to depend on other field values. Show and hide fields dynamically based on other fields' values with support for complex conditional logic.

[![Nova Dependency Container Demo](https://camo.githubusercontent.com/a48824f7787726f6ab6e965088ad65a5728d8edec948605dac7484cfaa167aa8/68747470733a2f2f692e696d6775722e636f6d2f547047384c305a2e676966)](https://camo.githubusercontent.com/a48824f7787726f6ab6e965088ad65a5728d8edec948605dac7484cfaa167aa8/68747470733a2f2f692e696d6775722e636f6d2f547047384c305a2e676966)

Features
--------

[](#features)

- **Conditional Field Display**: Show/hide fields based on other field values
- **Multiple Dependency Types**: Support for various comparison operators
- **Complex Logic**: Chain multiple conditions together
- **Flexible Field Support**: Works with [whitecube/nova-flexible-content](https://github.com/whitecube/nova-flexible-content) layouts
- **Nova 4 &amp; 5 Compatible**: Works with Laravel Nova 4.x and 5.x (tested with Nova 4.35.x and Nova 5.7.5)
- **Laravel 12 Ready**: Full support for Laravel 11.x and 12.x
- **PHP 8.3 Support**: Modern PHP features and type safety
- **Fully Tested**: Comprehensive test coverage with Pest
- **Development Ready**: Comprehensive testing and code quality tools

Requirements
------------

[](#requirements)

- PHP 8.3 or higher
- Laravel 11.x or 12.x
- Laravel Nova 4.x or 5.x

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require iamgerwin/nova-dependency-container
```

Usage
-----

[](#usage)

### Basic Usage

[](#basic-usage)

```
use Iamgerwin\NovaDependencyContainer\NovaDependencyContainer;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\Textarea;

public function fields(NovaRequest $request)
{
    return [
        Select::make('Type')
            ->options([
                'personal' => 'Personal',
                'business' => 'Business',
            ]),

        NovaDependencyContainer::make([
            Text::make('Company Name'),
            Text::make('Tax ID'),
        ])->dependsOn('type', 'business'),

        NovaDependencyContainer::make([
            Text::make('Personal ID'),
            Text::make('Date of Birth'),
        ])->dependsOn('type', 'personal'),
    ];
}
```

### Available Dependency Methods

[](#available-dependency-methods)

#### `dependsOn(string $field, $value)`

[](#dependsonstring-field-value)

Show container when field equals specific value:

```
NovaDependencyContainer::make([
    Text::make('Company Name'),
])->dependsOn('type', 'business')
```

#### `dependsOnIn(string $field, array $values)`

[](#dependsoninstring-field-array-values)

Show container when field value is in array:

```
NovaDependencyContainer::make([
    Text::make('Priority Note'),
])->dependsOnIn('status', ['urgent', 'high'])
```

#### `dependsOnNot(string $field, $value)`

[](#dependsonnotstring-field-value)

Show container when field does NOT equal value:

```
NovaDependencyContainer::make([
    Text::make('Cancellation Reason'),
])->dependsOnNot('status', 'active')
```

#### `dependsOnNotIn(string $field, array $values)`

[](#dependsonnotinstring-field-array-values)

Show container when field value is NOT in array:

```
NovaDependencyContainer::make([
    Text::make('Additional Info'),
])->dependsOnNotIn('status', ['completed', 'cancelled'])
```

#### `dependsOnEmpty(string $field)`

[](#dependsonemptystring-field)

Show container when field is empty:

```
NovaDependencyContainer::make([
    Text::make('Default Value'),
])->dependsOnEmpty('custom_value')
```

#### `dependsOnNotEmpty(string $field)`

[](#dependsonnotemptystring-field)

Show container when field is NOT empty:

```
NovaDependencyContainer::make([
    Textarea::make('Description'),
])->dependsOnNotEmpty('title')
```

#### `dependsOnNullOrZero(string $field)`

[](#dependsonnullorzerostring-field)

Show container when field is null or zero:

```
NovaDependencyContainer::make([
    Text::make('Free tier features'),
])->dependsOnNullOrZero('subscription_plan')
```

### Chaining Multiple Dependencies

[](#chaining-multiple-dependencies)

You can chain multiple dependencies together. ALL conditions must be met:

```
NovaDependencyContainer::make([
    Text::make('Premium Features'),
    Text::make('Custom Domain'),
])->dependsOn('plan', 'premium')
  ->dependsOnNotEmpty('company_name')
  ->dependsOnNot('status', 'suspended')
```

### Using with Closures

[](#using-with-closures)

You can pass a closure to dynamically generate fields:

```
NovaDependencyContainer::make(function () {
    return [
        Text::make('Dynamic Field 1'),
        Text::make('Dynamic Field 2'),
    ];
})->dependsOn('type', 'dynamic')
```

### Apply to Fields (Flat Structure)

[](#apply-to-fields-flat-structure)

Use `applyToFields()` to apply dependencies without the container wrapper:

```
NovaDependencyContainer::make([
    Text::make('Field 1'),
    Text::make('Field 2'),
])->dependsOn('type', 'special')
  ->applyToFields()
```

### Adding Dependencies to Regular Fields

[](#adding-dependencies-to-regular-fields)

You can also add dependencies directly to regular Nova fields using the `HasDependencies` trait:

```
use Iamgerwin\NovaDependencyContainer\HasDependencies;
use Laravel\Nova\Fields\Text;

class CustomTextField extends Text
{
    use HasDependencies;
}

// In your Nova resource:
CustomTextField::make('Special Field')
    ->dependsOn('type', 'custom')
```

### Using with Flexible Fields

[](#using-with-flexible-fields)

`NovaDependencyContainer` works seamlessly with [whitecube/nova-flexible-content](https://github.com/whitecube/nova-flexible-content) Flexible fields:

```
use Iamgerwin\NovaDependencyContainer\NovaDependencyContainer;
use Whitecube\NovaFlexibleContent\Flexible;
use Laravel\Nova\Fields\Select;
use Laravel\Nova\Fields\Text;

Flexible::make('Overlay Items')
    ->addLayout('Overlay Item', 'overlay_item', [
        Select::make('Type')
            ->options([
                'Default' => 'Default',
                'Location' => 'Location',
                'Contact Us' => 'Contact Us',
            ]),

        NovaDependencyContainer::make([
            Text::make('Recipient Email', 'recipient_email')
                ->rules('nullable', 'email', 'max:255'),
        ])->dependsOn('type', 'Contact Us'),

        NovaDependencyContainer::make([
            Text::make('Location Name', 'location_name'),
            Text::make('Address', 'address'),
        ])->dependsOn('type', 'Location'),
    ]),
```

The package automatically detects the Flexible field context and resolves field attributes correctly, even with dynamically prefixed attribute names.

For more details, see the [Flexible Field Support documentation](docs/flexible-field-support.md).

Advanced Examples
-----------------

[](#advanced-examples)

### Multi-Step Form

[](#multi-step-form)

```
public function fields(NovaRequest $request)
{
    return [
        Select::make('Step')
            ->options([
                '1' => 'Basic Info',
                '2' => 'Address',
                '3' => 'Confirmation',
            ]),

        NovaDependencyContainer::make([
            Text::make('First Name')->required(),
            Text::make('Last Name')->required(),
            Text::make('Email')->required(),
        ])->dependsOn('step', '1'),

        NovaDependencyContainer::make([
            Text::make('Street Address')->required(),
            Text::make('City')->required(),
            Text::make('Zip Code')->required(),
        ])->dependsOn('step', '2'),

        NovaDependencyContainer::make([
            Boolean::make('Confirm Details'),
            Textarea::make('Additional Notes'),
        ])->dependsOn('step', '3'),
    ];
}
```

### Conditional Validation

[](#conditional-validation)

```
public function fields(NovaRequest $request)
{
    return [
        Select::make('Payment Method')
            ->options([
                'credit_card' => 'Credit Card',
                'bank_transfer' => 'Bank Transfer',
                'paypal' => 'PayPal',
            ]),

        NovaDependencyContainer::make([
            Text::make('Card Number')
                ->required()
                ->rules('required', 'credit_card'),
            Text::make('CVV')
                ->required()
                ->rules('required', 'digits:3'),
        ])->dependsOn('payment_method', 'credit_card'),

        NovaDependencyContainer::make([
            Text::make('Bank Account')
                ->required(),
            Text::make('Routing Number')
                ->required(),
        ])->dependsOn('payment_method', 'bank_transfer'),

        NovaDependencyContainer::make([
            Text::make('PayPal Email')
                ->required()
                ->rules('required', 'email'),
        ])->dependsOn('payment_method', 'paypal'),
    ];
}
```

Testing
-------

[](#testing)

Run the test suite:

```
composer test
```

Run tests with coverage:

```
composer test-coverage
```

Code Quality
------------

[](#code-quality)

Format code with Laravel Pint:

```
composer format
```

Run static analysis with PHPStan:

```
composer analyse
```

Changelog
---------

[](#changelog)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

Please review [our security policy](../../security/policy) on how to report security vulnerabilities.

Credits
-------

[](#credits)

- [iamgerwin](https://github.com/iamgerwin)
- [All Contributors](../../contributors)

This package is inspired by [alexwenzel/nova-dependency-container](https://github.com/alexwenzel/nova-dependency-container).

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

42

—

FairBetter than 90% of packages

Maintenance70

Regular maintenance activity

Popularity18

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~5 days

Total

14

Last Release

175d ago

PHP version history (2 changes)v1.0.0PHP ^8.3

1.0.16PHP ^8.3|^8.4|^8.5

### Community

Maintainers

![](https://www.gravatar.com/avatar/8f6f1736b8e2833ccb6c4098e4ecb5081d9cd5db2af370fde0365d441fbfbf59?d=identicon)[iamgerwin](/maintainers/iamgerwin)

---

Top Contributors

[![iamgerwin](https://avatars.githubusercontent.com/u/1331683?v=4)](https://github.com/iamgerwin "iamgerwin (39 commits)")

---

Tags

dependencylaravelnovanova-extensionnova4nova5phpcontainerlaraveldependencyfieldnovaconditional

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/iamgerwin-nova-dependency-container/health.svg)

```
[![Health](https://phpackages.com/badges/iamgerwin-nova-dependency-container/health.svg)](https://phpackages.com/packages/iamgerwin-nova-dependency-container)
```

###  Alternatives

[digital-creative/conditional-container

Provides an easy way to conditionally show and hide fields in your Nova resources.

116593.8k4](/packages/digital-creative-conditional-container)[izi-dev/nova-conditional-field

Conditional Field

1623.9k](/packages/izi-dev-nova-conditional-field)[nunomaduro/laravel-pot

Set of commands to inspect Laravel's container

991.6k](/packages/nunomaduro-laravel-pot)[daylerees/container-debug

Inspect the Laravel IoC Container from Artisan.

572.8k](/packages/daylerees-container-debug)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
