Как подружить ExtJs с серверной частью
июня 25, 2007 by adminВ свободное время разрабатываю небольшую системку, на связке Zend FW + Doctrine + ExtJs, главными чертами которой является обилие grid’ов, деревьев, drag’n'drop’ов и прочих ExtJs-прелестей.
Раньше заводил контроллеры и экшны на каждый чих. Надоело. Стал думать, как минимальным количеством кода моделей обеспечить связь с клиентской частью и не потерять систему прав.
Поел. Покурил. Хотел было выпить, но ничего не нашел. С криком “J.F.D.I”, поел еще раз. Потом устал есть, и начал ваять.
Задал маски роутинга для AJAX-запросов в конфиге:
;выборка коллекции объектовroutes.ajax.route = “ajax/:name/all”routes.ajax.defaults.controller = “ajax”routes.ajax.defaults.action = “getAll”routes.ajax.reqs.name = “\w+”
;выборка объекта по idroutes.ajax.route = “ajax/:name/:id”routes.ajax.defaults.controller = “ajax”routes.ajax.defaults.action = “getOne”routes.ajax.reqs.name = “\w+”routes.ajax.reqs.id = “\d+”
;запуск метода для объекта без параметровroutes.ajax.route = “ajax/:name/:id/:method”routes.ajax.defaults.controller = “ajax”routes.ajax.defaults.action = “run”routes.ajax.reqs.name = “\w+”routes.ajax.reqs.id = “\d+”routes.ajax.reqs.method = “\w+”
;запуск метода для объекта с параметрамиroutes.ajax.route = “ajax/:name/:id/:method/:vars”routes.ajax.defaults.controller = “ajax”routes.ajax.defaults.action = “run”routes.ajax.reqs.name = “\w+”routes.ajax.reqs.id = “\d+”routes.ajax.reqs.method = “\w+”
В каждой запрашиваемой модели (на основе Doctrine) сделал маску прав на действия:
class Book extends Doctrine_Record{ … public function setActionRules() { $this->allow(’create’,'user’); $this->allow(’delete’,'owner’); $this->allow(’setAuthor’,'onwer’); … $this->allow(’getAuthor’,'guest’); … }…}
Соответственно, в контроллере инициализирую объект(объекты) и проверяю права доступа к методам. Кода получается пока немного, но еще не все способы доступа реализовал.
PS: Столкнулся с проблемой, когда нужно совершить несколько действий над объектом. Типичный пример - изменение значения. То, как это реализовано в данный момент ну ооочень не нравится.
Буду опять думать. Как же я это дело не люблю :-[
Posted in Без рубрики |