Возможно, вам нужно использовать большое имя пакета nova-dependency-container. Вы можете прочитать, как использовать его в novapackage. Примечания:
Вот мой код ресурса Document Nova. Удачного кодирования, спросите меня, если вам нужно!
<?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;
/**
* The model the resource corresponds to.
*
* @var string
*/
public static $model = 'App\Document';
/**
* The single value that should be used to represent the resource when being displayed.
*
* @var string
*/
public static $title = 'id';
/**
* The columns that should be searched.
*
* @var array
*/
public static $search = [
'id',
];
/**
* Get the fields displayed by the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
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') //unit max is Kb
])->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'),
];
}
/**
* Get the cards available for the request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function cards(Request $request)
{
return [];
}
/**
* Get the filters available for the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function filters(Request $request)
{
return [];
}
/**
* Get the lenses available for the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function lenses(Request $request)
{
return [];
}
/**
* Get the actions available for the resource.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function actions(Request $request)
{
return [];
}
}
Обновление:
С проблемой: «Когда я использую ваш код, он работает для загрузки видео (потому что это на первом месте), но затем загрузка документа выдает ошибку, которая должна быть подражателем видео, как указано в списке. Выбран ли документ или видео; применяются правила видео ».
Чтобы решить: используйте виртуальные атрибуты в модели, называемые Мутаторы Laravel , я слышал это несколько дней назад. Смотрите мои ниже коды:
// Model Laravel: app\Document.php
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;
}
}
// Model Nova: app\Nova\Document.php
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') //unit max is Kb
])->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'),
];
}