На данный момент я создаю API, который должен быть одной точкой входа как минимум для двух целей.
Мой api.php
Route::post('/action', 'Api\ActionApiController@process')->name('action');
Этот URL-адрес будет принимать данные публикации в формате json. На основе этого json у меня будет другая проверка, которая должна по-разному применяться к этим данным json.
Например
{
"type" : 1,
"data1" : "B",
"data2" : "C"
}
Логика должна быть такой
если type == 1, то data1 является обязательным, а data2 - необязательным. Но если type == 2, то data1 является необязательным, а data2 - обязательным.
Пока я создаю два пользовательских запроса с разными функциями проверки, потому что я не хочу раздувать свою функцию проверки многими, если на всякий случай необходимо расширить type.
Итак, я пришел с двумя классами
class Data1Request extends FormRequest {
public function rules()
{
return [
'data1' => 'required',
];
}
}
и другой класс
class Data2Request extends FormRequest {
public function rules()
{
return [
'data2' => 'required',
];
}
}
и наконец мой контроллер
public function process(Request $request){
//check type: it is okay for me to put many if here, because this is only casting things to its type
if ($request->input('type') == 1) {
//where should I cast my request and validate it?
}
}
Итак, где и как мне передать переменную запроса в свой собственный класс и проверить ее? или я должен пойти со многими, если (а) путем?
Добавлен:
интересно, я просто знаю, что такая проверка есть, но разве не должно быть сложно ее прочитать и реализовать, если на ней есть какая-то вложенная логика? например, требуется, если type == 1 && (type == 2 || type == 3)?
В приведенном выше случае вам нужно построить массив правил в соответствии с вашим состоянием и вернуть его в FormRequest. Вы можете получить доступ к отправленным данным, используя $this






Проверьте валидацию
required_ifв laravel. laravel.com/docs/5.6/validation#rule-required-if