Можно ли добавить имена и описание для правил валидации в классе запросов 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',
]
];
}
}

Потому что я хочу использовать эти дополнительные данные для документации по 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',
];
}
}

4

Решение

Ты можешь сделать 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());
}
}

Но это может быть хорошей идеей, чтобы посмотреть на развязность для документации. Есть несколько привязок для 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());
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector