Php 是否可以在laravel请求类中添加验证规则的名称和说明
我要求上课:Php 是否可以在laravel请求类中添加验证规则的名称和说明,php,laravel,Php,Laravel,我要求上课: class UpdateProductRequest extends ApiRequest { public function authorize() { return true; } public function rules() { return [ 'name' => 'required', 'description' => 'r
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',
]
];
}
}
因为我想在RESTAPI文档中使用这些附加数据。我不想重复这样的名字:
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',
];
}
}
您可以制定
规则
来使用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());
}
}
但是查看文档可能是个好主意。larave的绑定很少:
编辑:
rules
是一种用于apiData
的适配器,用于保存数据。因此,对于从未提及的问题,您需要将逻辑放入apiData
,而不更改规则中的逻辑:
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请求并不容易…听起来很糟糕,但我没有完全遵循。为什么要在类之间复制规则,以及它与您提出的问题的关系?公共函数规则(){$rules=(new Requests\Backend\UpdateProductRequest)->rules();unset($rules['something');return$rules;}好的,您帮了我很大的忙,我只是想知道如何实现这一点。您的上一个解决方案并不完美,因为我需要编辑所有当前的后端请求,并且我不希望在后端请求中使用apiData()函数。。。