Как подружить 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 Без рубрики |

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.