Perhaps you need to use a greate package name nova-dependency-container. You can read the way to use it at novapackage. Notes:
Here is my Document Nova Resource code. Happy coding, ask me if you need!
<?php
namespace App\Nova;
use Laravel\Nova\Fields\ID;
use Laravel\Nova\Fields\Text;
use Laravel\Nova\Fields\File;
use Laravel\Nova\Fields\Select;
use Illuminate\Http\Request;
use Laravel\Nova\Http\Requests\NovaRequest;
use Epartment\NovaDependencyContainer\HasDependencies;
use Epartment\NovaDependencyContainer\NovaDependencyContainer;
class Document extends Resource
{
use HasDependencies;
public static $model = 'App\Document';
public static $title = 'id';
public static $search = [
'id',
];
public function fields(Request $request)
{
return [
ID::make()->sortable(),
Select::make('Type','type')
->options([
'video' => 'Video',
'download' => 'Download',
])
->rules('required'),
NovaDependencyContainer::make([
File::make('Video File','file_name')
->storeOriginalName('file_name')
->rules('required','mimes:mpga,mp2,mp2a,mp3,m2a,m3a,mp4,flv','max:30000')
])->dependsOn('type', 'video'),
NovaDependencyContainer::make([
File::make('Document File', 'file_name')
->storeOriginalName('file_name')
->rules('required','mimes:jpeg,png,jpg,doc,docx,pdf','max:1000')
])->dependsOn('type', 'download'),
];
}
public function cards(Request $request)
{
return [];
}
public function filters(Request $request)
{
return [];
}
public function lenses(Request $request)
{
return [];
}
public function actions(Request $request)
{
return [];
}
}
Updates:
With problem: “When I'm using your code it works for uploading videos (because that comes first) but then uploading a document gives error that must be a video mimetype as listed. Whether document or video is selected; video rules are applied.”
To solve: Use virtual attributes in model, called Laravel mutators, I heard it some days ago. See my below codes:
class Document extends Model
{
public function getFileNameVideoAttribute()
{
if ($this->type == "video") {
return $this->file_name;
}
return;
}
public function setFileNameVideoAttribute($value)
{
$this->attributes['file_name'] = $value;
}
public function getFileNameDocumentAttribute()
{
if ($this->type == "download") {
return $this->file_name;
}
return;
}
public function setFileNameDocumentAttribute($value)
{
$this->attributes['file_name'] = $value;
}
}
public function fields(Request $request)
{
return [
ID::make()->sortable(),
Select::make('Type','type')
->options([
'video' => 'Video',
'download' => 'Download',
])
->rules('required'),
NovaDependencyContainer::make([
File::make('Video File','file_name_video')
->storeOriginalName('file_name')
->rules('required','mimes:mpga,mp2,mp2a,mp3,m2a,m3a,mp4,flv','max:30000')
])->dependsOn('type', 'video'),
NovaDependencyContainer::make([
File::make('Document File', 'file_name_document')
->storeOriginalName('file_name')
->rules('required','mimes:jpeg,png,jpg,doc,docx,pdf','max:1000')
])->dependsOn('type', 'download'),
];
}