也许你需要使用一个更大的包名 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 [];
}
}
更新:
有问题:“当我使用您的代码时,它适用于上传视频(因为这是第一位的),但随后上传文档会出现错误,该错误必须是所列的视频 mimetype。选择文档还是视频;应用视频规则。”
解决:在模型中使用虚拟属性,叫Laravel mutators,前几天听说过。请参阅我的以下代码:
// 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'),
];
}