Где ID?

Надоело мне писать в начале каждого метода контроллера, требующего для работы ID записи, проверку на наличие этого самого ID.

Ну вот например для вызовы методов /controller/view без ID записи смысла не имеют. Я в таких случаях делаю redirect на метод index. Примерно так:

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

Маленький метод, который можно добавить в AppController. Работу с PHP4 не тестировал. И работу с контроллером, у которого несколько моделей тоже ;-)

Как видно, можно передавать (но не обязательно), массив с параметрами:

  • ключ id — значение, которое надо проверить. Если не указано, используем id от первой загруженной модели
  • ключ flash — сообщение для пользователя. Если не указано, значит все делаем молча
  • ключ action — действие, на которое надо редирект сделать. Если не указано, то index.

Все это будет работать в пределах одного контроллера, т.е. редирект будет на действие того-же контроллера. Желающие могут доработать напильником.

Автор

Сергей Родовниченко

Родился, учился, работал и все такое. Занимаюсь поддержкой сайтов на Shop-Script, Joomla, Wordpress, Prestashop. А также на самописных движках на базе CakePHP.

10 thoughts on “Где ID?”

  1. Спасибо, буду использовать. Напильником только уберу die(),
    напишу $this->redirect(array(‘controller’=>$this->params[‘controller’], ‘action’=>$action), null, true);
    что впрочем тоже самое.

  2. После $controller->redirect() жизнь продолжается, т.е. выполнение всех остальных инстукций, которые после redirect не прервется. Потому и die()

  3. После $controller->redirect() жизнь продолжается, т.е. выполнение всех остальных инстукций, которые после redirect не прервется. Потому и die()

  4. Сходил посмотрел API — ура, приделали выход. И вправду можно просто redirect сделать. :-)

  5. Сходил посмотрел API — ура, приделали выход. И вправду можно просто redirect сделать. :-)

  6. Еще можно сделать

    if($id) return $id

    тогда можно писать, например:

    $this->read($this->redirect_if_no_id());

    :-)

  7. Еще можно сделать

    if($id) return $id

    тогда можно писать, например:

    $this->read($this->redirect_if_no_id());

    :-)

  8. Спасибо, буду использовать. Напильником только уберу die(),
    напишу $this->redirect(array('controller'=>$this->params['controller'], 'action'=>$action), null, true);
    что впрочем тоже самое.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *