Что на самом деле означает эта ошибка?
Так что я видел, как эта ошибка появлялась, иногда, но она не помогает описывать действительную ошибку, которая произошла. И при этом это не дает никаких подсказок относительно того, что могло бы заставить это отображаться.
Cannot use modParams with indexes that do not exist.
Может ли кто-нибудь более подробно объяснить, что означает эта ошибка, к чему она относится (например, к поведению, компоненту, контроллеру и т. Д.), Наиболее распространенным причинам и как ее исправить?
Чтобы начать расследование, вы можете найти ошибку здесь. https://github.com/cakephp/cakephp/blob/master/lib/Cake/Utility/ObjectCollection.php
2 ответа
Условия Layman
CakePHP говорят применить массив параметров к коллекции объектов, чтобы каждый конкретный объект мог изменять параметры, отправляемые следующему объекту. Существует ошибка в том, как CakePHP сказано сделать это.
Глубоко
Как правило, это вытекает из механизма публикации событий CakePHP. Где-то в вашем коде есть экземпляр ObjectCollection
, который запускается с определенными параметрами. То есть метод вызывается для каждого объекта в этой коллекции.
Каждый метод обратного вызова имеет параметры. Первоначально параметры передаются в trigger()
, В обычных случаях (где modParams
ложно), каждый обратный вызов получает одинаковые параметры. Но когда modParams
не является строго ложным, результат каждого обратного вызова перезаписывает параметр, указанный modParams
,
Таким образом, если в коллекции два объекта, modParams равен 1, а params[1] изначально равен 'a', тогда обратному вызову дается первый объект с params[1] == a. Этот обратный вызов возвращает "b", поэтому при вызове следующего обратного вызова второй объект получает params[1] == b.
Исключение возникает, когда modParams
данное значение не существует в первоначально заданном params
, Например, если modParams
это 2 и params
является array (0 => 'a', 1 => 'b')
Вы получите это исключение.
В твоем случае
В частности, отладка должна выполняться на низком уровне, потому что это метод универсального класса. Обратный след из исключения должен привести вас к trigger()
позвонить на конкретный конкретный класс. Этот вызов дается не ложным modParams
и params
это не имеет данного modParams
, Это может быть ошибка кода в конкретном классе, расширяющая ObjectCollection
или это может быть просто общее сообщение, полученное из метода, которому не даны ожидаемые аргументы.
Вы пробовали читать документацию?
/*
* - `modParams` Allows each object the callback gets called on to modify the parameters to the next object.
* Setting modParams to an integer value will allow you to modify the parameter with that index.
* Any non-null value will modify the parameter index indicated.
* Defaults to false.
*/
Вы не вставляли никакой код, поэтому я думаю, что ваш третий аргумент метода содержит что-то не так.