Laravel - проверить индексированный массив - PullRequest
0 голосов
/ 05 июля 2019

У меня есть валидатор, который выглядит так:

$validator = Validator::make($shipment, [
        'collection_date' => 'required|date',
        "parcels"    => "required|array|min:1",
        "parcels.*.items" => "required|array",
        "parcels.*.items.*.value" => "required"
    ]);

Теперь, глядя на это, легко увидеть, что участки должны быть массивом, и каждая часть должна иметь свойство items, и это должен быть массив, а каждый элемент должен иметь свойство value. * 1006. *

Однако я получаю вместо того, чтобы кто-то проходил через это, как и следовало ожидать,

[parcels:[{items:[{value:1}]}]]

Они передают это так:

[parcels:[{items:{value:1}}]]

Когда есть только один предмет. Валидатор терпит неудачу, как я хочу, конечно, но сообщение довольно странное, потому что оно действительно видит items как массив, хотя это на самом деле ассоциативный массив, а не список элементов.

Так что в сообщении говорится что-то вроде error: parcels.0.items.values has no property value - я точно не помню, что оно говорит, я просто знаю, что оно явно пыталось получить доступ к «значению», как если бы оно было членом массива «items» (потому что технически это так! просто не так, как я хочу).

В то время как то, что я действительно хотел бы сказать, это что-то вроде error: parcels.0.items was not supplied as an array

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Использовать пользовательское сообщение об ошибке для его отображения.Ваш код будет как

$validator = Validator::make($shipment, [
    'collection_date' => 'required|date',
    "parcels"    => "required|array|min:1",
    "parcels.*.items" => "required|array",
    "parcels.*.items.*.value" => "required"
],
[
    'parcels.*.items.array' => 'Your custom error msg which you want to display',
]);
0 голосов
/ 05 июля 2019

Быстрое решение, которое приходит на ум, - добавление настраиваемого сообщения об ошибке для вашего правила:

$messages = [
    'parcels.*.items.array' => ':attribute was not supplied as an array',
];

$validator = Validator::make(
             $shipment, 
             [ 
              'collection_date' => 'required|date',
              "parcels"    => "required|array|min:1",
              "parcels.*.items" => "required|array",
              "parcels.*.items.*.value" => "required"
              ],
              $messages
           );

Более подробную информацию о настраиваемых сообщениях об ошибках можно найти в документации Laravel .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...