CakePHP index () против view () и компонентов URL - PullRequest
0 голосов
/ 05 мая 2018

Меня смущает различие и трактовка функций index() и view() внутри CakePHP 2.4.

В частности, я пытаюсь изменить сторонний API, созданный в CakePHP 2.4

Рассмотрим этот контроллер:

class EventsController extends AppController {
<snip>
  public function index() {
    if ($this->request->params['named']) {  
       $conditions = $this->request->params['named'];
    } else {
      $conditions = array();
   }
}

Это позволяет мне создать URL-адрес, такой как http://myserver/api/events/index/StartTime >=:12/EndTime <=15.json, и StartTime и EndTime переходят в условия, когда я выполняю поиск.

Отлично.

Теперь у того же контроллера есть эта дополнительная функция:

public function view($id) {

}

Эта функция, кажется, вызывается, когда я вызываю URL вроде http://myserver/api/events/1234.json

Я пытаюсь расширить view дополнительными параметрами, как индекс. Например, я хотел бы вызвать:

http://myserver/api/events/1234/MonitorId =:3.json и MonitorId =:3 передаются в качестве параметра для обработки в представлении. Я не хочу добавить их в определения функций - это может быть что угодно.

Если я попытаюсь сделать это, я получу «Контроллер» не найден, но этот же подход работает в index ()

Может ли кто-нибудь помочь мне достичь своей цели и помочь объяснить, что происходит?

(ЕСЛИ это помогает, полный код контроллера здесь )

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Оказывается, мне нужно явно вызвать действие view, чтобы передать ему больше параметров.

Так что api/events/view/218245/AlarmFrames >=: 80.json работает как задумано, и тогда я могу получить параметры с помощью $conditions = $this->request->params['named'];

0 голосов
/ 05 мая 2018

Как я вижу, вы используете CakePHP RESTful маршрутизацию rout.php

Здесь,

  • index используется для перечисления всех ресурсов, например все сообщения в блоге. URL /events/index автоматически сопоставляется с методом index в контроллере.
  • view используется для отображения конкретного ресурса, который может быть идентифицирован с помощью некоторого уникального идентификатора, например id или uuid, например. конкретное сообщение в блоге. URL /events/<some_identifier> отображается на view метод

Вам нужно изменить определение view, чтобы прочитать все параметры строки запроса, которые вы передаете в URL, и соответственно вызвать Model. По умолчанию. routes анализирует первую строку после events в URL к идентификатору ресурса и передает ее в качестве первого аргумента методу view в контроллере. Это код лесов.

Вы можете использовать именованные параметры $this->request->params['named'] в своем определении view и создавать свои запросы. Нет жесткого кодирования.

...