Doctrine & ZF Cheat Sheet
Posted on Понедельник, декабря 15, 2008 in Doctrine, ZendFramework
Тут я приведу несколько часто используемых мной приемов для работы с Doctrine и (или) ZF.
1. Выбока по id с проверкой на существование записи:
$courier = Doctrine::getTable("Couriers")->find($this->_getParam('id')); if ($courier===FALSE) throw new Exception("courierId не найден"); $this->view->courier=$courier->toArray();
Теперь по строкам:
- Выбираем из модели Couriers запись с id который нам передал Zend Framework через Router в параметр id.
- Если запись не найденна но генерим новое исключение.
- Передаем «виеву» массив данных от записи.
2. Сбор все related записей у модели
Как неидеальный пример:
$query = new Doctrine_Query(); $query->from('CityAddress ca,ca.CityStreets cs,cs.CityRegions cr') >where("id=?",intval($id) ); $result = $query->execute( array(),Doctrine::HYDRATE_ARRAY );
Что вернет нам не только запись но и все «привязанные» записи (hasOne, hasMany)
3. NOW()
Вернуть текущее время и дату
$messages->date_delivery=new Doctrine_Expression('NOW()');
4. Last Insert ID
Вернуть последний добавленный ID записи
$lastInsertedId=$model->getIncremented();
Уникальных посетителей темы: 73
if ($courier===FALSE) throw new Exception(«courierId не найден»);
А мне такой подход не нравится. Что будет когда пользователь зайдет на страницу с неизвестным ID – он увидит исключение Или работу его обработчика.
ИМХО лучше делать так
If ($courier===FALSE) $this->view->is_valid = false;
А во вью уже проверять. И тогда пользователь увидит в привычном дизайне, что объект не найден, а скажем другие блоки страницы покажутся как обычно.
Либо еще можно наплодить множество классов исключений (Я так делал раньше).
Например, throw new Topics_Not_Found_Exception (параметры)
А уже обработчик определит, что это объект именно такого класса и с учетом переданных параметров обработает его как надо (загрузит соответсвующее вью и т.д.)
Но этот метод уступает первому по производительности. И вообще эксепшены в пхп – достаточно медленная штука.
каждый делает как ему удобно, у меня exception обрабатываются визуально в дизайне сайта. так что пользователь получает не дебаг страницу какуюнить, а просто красивую ошибку =)