Я пытаюсь использовать пользовательский FormRequest с правилами проверки для данных в формате JSON. Если я использую тот же код в контроллере вместо класса FormRequest, то он работает нормально, см. Ниже:
массив данных (из запроса ajax):
[
{
"name": "id",
"value": "1"
},
{
"name": "title",
"value": "My fun project"
}
]
Контроллер:
public function update(Request $request, $id) {
//convert it to readable json
$jsonReq = $request->json()->all();
$jsonData = array();
foreach ($jsonReq as $json) {
$jsonData[$json["name"]] = $json["value"];
}
$rules = [
'id' => 'required|numeric:1',
'title' => 'required|max:255',
];
$validation = Validator::make($jsonData, $rules);
if ($validation->fails()) {
return $validation->errors();
}
}
Выше работает нормально при использовании в контроллере. Однако я хочу разделить свою проверку в отдельном классе, расширяя форму FormRequest. Это вызывает некоторые ошибки, скорее всего, из-за формата массива.
class UpdateProjectValidationRequest extends FormRequest {
public function rules() {
$jsonReq = $this->json()->all();
$jsonData = array();
foreach ($jsonReq as $json) {
$jsonData[$json["name"]] = $json["value"];
}
return [
'id' => 'required|max:1', //does not work
$jsonData['title'] => 'required|max:255', //does not work
];
}
Контроллер:
public function update(UpdateProjectValidationRequest $request, $id) {
// validate against rules
$request->rules();
Сообщение об ошибке:
{
"message": "The given data was invalid.",
"errors": {
"My fun project": [
"My fun project field is required."
],
"id": [
"The id field is required."
],
Очевидно, что это связано с форматом. Есть идеи как решить это? Обратите внимание, что после цикла foreach данные форматируются так:
{
"id": "1",
"title": "My Fun project",
}