2014-01-30 7 views
1

Итак, я видел эту ошибку, иногда, но это не помогает в описании фактической ошибки, которая произошла. Он также не дает никаких указаний относительно того, что может вызвать его отображение.Что означает эта ошибка?

Cannot use modParams with indexes that do not exist.

Может кто-нибудь объяснить более verbosly, что означает эта ошибка, что он относится к (например, поведение, компонент, контроллер, и т.д.), наиболее распространенные причины и как это исправить?

Чтобы начать расследование, вы можете найти здесь ошибку. https://github.com/cakephp/cakephp/blob/master/lib/Cake/Utility/ObjectCollection.php#L128

ответ

0

Вы пробовали прочитать документацию?

/* 
* - `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. 
*/ 

Вы не вставляли код, поэтому, я думаю, ваш третий аргумент метода содержит что-то неправильно.

+0

Я хотел получить более общее объяснение, поскольку комментарии не объясняют, как метод интегрируется с кодом приложения. –

1

Условия неспециалиста
CakePHP это говорят, чтобы применить массив параметров к коллекции объектов, таким образом, что каждый конкретный объект может изменять параметры, посланные к следующему объекту. Произошла ошибка в том, как CakePHP сообщается об этом.

В Глубина
обобщенно, это поднимается от механизма публикации событий CakePHP. Где-то в вашем коде есть экземпляр ObjectCollection, который составляет triggered with certain parameters. То есть, метод вызывается для каждого объекта в этой коллекции.

Для каждого метода обратного вызова заданы параметры. Первоначально параметры передаются в trigger(). В обычных случаях (где modParams является ложным), каждый обратный вызов получает одинаковые параметры. Но когда modParams не является строгим ложным, результат каждого обратного вызова перезаписывает параметр, указанный modParams.

Итак, если в коллекции есть два объекта, modParams - 1, а params [1] - это 'a', то обратный вызов получает первый объект с параметрами [1] == a. Этот обратный вызов возвращает «b», поэтому, когда вызывается следующий обратный вызов, второй объект получает параметры [1] == b.

Исключение возникает, когда заданное значение modParams не существует в первоначально заданном params. Например, если modParams равно 2, а params - array (0 => 'a', 1 => 'b'), вы получите это исключение.

В вашем случае
В частности, отладки это должно быть сделано на низком уровне, потому что это метод на общий класс. В обратном направлении от Exception вам должно быть приковано к призыву trigger() к конкретному конкретному классу. Этот вызов предоставляется недействительным modParams и params, который не имеет данных modParams. Это может быть ошибка кода в конкретном классе, распространяющаяся на ObjectCollection, или это может быть просто общее сообщение, связанное с методом, которому не даются ожидаемые аргументы.

+0

Я не понимаю этого объяснения. Я не передаю modParams в качестве аргумента для любого метода обратного вызова. Отсюда вопрос.Я надеялся, что объясню более простые люди. –

+0

Какая часть понятна? Какая часть нет? Когда я сказал «где-то в вашем коде», я не имел в виду код, который вы написали, а скорее весь код кода, который вы используете. Например, абстрактный контроллер может ожидать, что некоторые входящие параметры будут применяться к контролируемым моделям, но эти параметры отсутствуют, и это общее генерируемое сообщение. Лучший способ предложить целевые рекомендации - увидеть обратную линию. – bishop

+0

Непонятная часть - «применить массив параметров к коллекции объектов». Часть, которая ясна, - ничто из этого. Что такое modParams? Где он установлен? Являются ли переданные объекты моделями, контроллерами или представлениями? Является ли это поднятием плохой находки, отсутствующих столбцов таблицы, плохих обратных вызовов или чего-то еще? Это запутанно, потому что я не активно 'пытаюсь использовать modParams', это то, что Cake делает автоматически. Я хотел бы понять, что это волшебство, чтобы сделать эту ошибку более наглядным описанием реальной проблемы. Под этим я подразумеваю фактический объект, а не сам метод. –

Смежные вопросы