是否有可能在laravel请求类添加名称和说明验证规则
问题描述:
我请求类:是否有可能在laravel请求类添加名称和说明验证规则
class UpdateProductRequest extends ApiRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required',
'description' => 'required',
];
}
}
但我想类似的东西:
class UpdateProductRequest extends ApiRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name'=> [
'name' => 'Product name',
'description' => 'Product name description',
'validation' => 'required',
'type' => 'string',
],
'description'=> [
'name' => 'Product description',
'description' => 'Product description description',
'validation' => 'required',
'type' => 'string',
]
];
}
}
因为我想用这个附加Rest API文档的数据。我不想重复这样一个名字:
class UpdateProductRequest extends ApiRequest
{
public function authorize()
{
return true;
}
public function apiData(){
return [
'name'=> [
'name' => 'Product name',
'description' => 'Product name description',
'type' => 'string',
],
'description'=> [
'name' => 'Product description',
'description' => 'Product description description',
'type' => 'string',
]
];
}
public function rules()
{
return [
'name' => 'required',
'description' => 'required',
];
}
}
答
您可以rules
使用您的apiData
像如下因素:
class UpdateProductRequest extends ApiRequest
{
public function authorize()
{
return true;
}
public function apiData()
{
return [
'name'=> [
'name' => 'Product name',
'description' => 'Product name description',
'validation' => 'required',
'type' => 'string',
],
'description'=> [
'name' => 'Product description',
'description' => 'Product description description',
'validation' => 'required',
'type' => 'string',
]
];
}
public function rules()
{
return array_map(function($item){
return $item['validation'];
}, $this->apiData());
}
}
但它可能是看Swagger的文档是个好主意。很少有绑定larave:https://packagist.org/search/?q=swagger%20laravel
编辑:
rules
是apiData
一种适配器,它保存的数据。所以,你需要把你的逻辑在apiData
不改变逻辑rules
从未提到-问题:
public function apiData()
{
return array_diff_key(
(new Requests\Backend\UpdateProductRequest)->apiData(),
['something' => false]
);
}
public function rules()
{
return array_map(function($item){
return $item['validation'];
}, $this->apiData());
}
这正是我没有,但我有后台/ UpdateProductRequest和API \ UpdateProductRequest现在还不是简单的复制规则从后端请求到api请求... – fico7489
听起来很不好,但我不太遵循。你为什么要在类之间复制规则,以及它如何与你提出的问题相关? –
public function rules() $ rules =(new Requests \ Backend \ UpdateProductRequest) - > rules(); unset($ rules ['something']); 返回$规则; } – fico7489