Общие вещи, которые вызывают эту "проблему":
private
Использование или protected
видимость действий. Все действия, к которым может обращаться URL, должны быть public
.
Падение в «пролетный ад». Вам нужно проверить, что действие использует предполагаемый маршрут. Как сказал Дейв, вы можете проверить это с помощью DebugKit в разделе «Запрос».
Вы что-то проверки, не проходит проверку, и перенаправляет вас где-то еще (но вы абсолютно клянутся идентификатор устанавливается (так на самом деле действительно проверить первый))
public function index($id=null) {
if (!$this->Model->exists($id))
$this->redirect(/*somewhere*/);
Вы используете некоторые вид ACL и дерево разрешений (или что-то еще) не было обновлено после добавления нового действия. Если вы внесли свою функцию private
, а затем измените ее на public
без обновления, она также даст вам эту ошибку.
Это общие проблемы, которые вызывают эту проблему с действиями.
Очевидно, проблема была в ACL, но, как правило, всегда проверяйте все возможные возможные сценарии, прежде чем впадать в панику и бегать по кругу, потому что это не сработало :) Любая ошибка, которая не попадает в эти сценарии, вероятно, заслуживают нового поиска в Google и нового вопроса (если другие вопросы/ответы не помогают).
Посмотрите в DebugKit под «запрос» -> Текущий маршрут, чтобы увидеть, какой путь он использует. Если это так, как ожидалось, просто «эхо» что-то »; exit, 'начиная с вашего AppController's beforeFilter() и посмотреть, как далеко вы узнаете, где эта проблема. – Dave
У вас есть ACL на месте, и если да, то вы дали доступ к вашему новому действию? – Nunser
Спасибо Nunser! Должно быть, это так. Думаю, мне нужно восстановить ACL. –