Не спится. Сижу пишу scaffolding для Zend Framework. Возникла проблема - для того, чтобы реализовать полноценное редактирование/удаление записей в таблице нужно добавить к стандартному классу Zend_Db_Table_Row одну public-функцию. Вот теперь сижу и думаю - насколько “правильно” будет просто открыть файл с этим классом и дописать функцию по сравнению с порождением подклассов.
С точки зрения проектировщика - этого делать не стоит. лучше породить подкласс. Но в данном случае прийдется порождать подкласс не только от Zend_Db_Table_Row, но и от Zend_Db_Table, а может и еще чего-то. Чего делать ну вообще не хочется - там кода писать абсолютно тупого - ну просто дофига (возможно я преувеличиваю немного, но все же…).
Чтобы вы делали в моем случае?
Да… Все больше и больше понимаю “недоразвитость” PHP. Если уж делать язык динамически типизированным и объектно-ориентированным - почему нельзя было сделать это нормально? Примеры “нормальных” языков в этом плане привести несложно - Python, Ruby, JavaScript.
В питоне такое “добавление” метода к классу решалось бы так:
def some_name(self): ... Class.new_func = some_nameВ JavaScript и того легче:
Class.new_func = function() {...}А в PHP… Эх…






September 1st, 2007 at 03:15
Я бы отнаследовал и добавил в него. Ведь рано или поздно ZF будет обновляться, и тогда все эти изменения в ядре вылезут боком. Да и как пример тушка ZF может совместно использоваться для кучи (несвоих?) проектов, и тогда такое поведение чревато.
September 1st, 2007 at 03:17
ЗЫ: сейчас посмотреть не могу, но скорее всего у Zend_Db_Table_Row есть интерфейс и/или абстрактный класс, от которого он наследует.
September 1st, 2007 at 03:23
Тут прикол в том, что Zend_Db_Table возвращает ВО ВСЕХ ФУНКЦИЯХ, которые что-то выбирают именно Zend_Db_Table_Row. Т.е. прийдется переписывать все эти функции.
Насчет выльется боком. Нужно добавить public-функцию getPrimaryKey. Там уже есть одна такая, только protected. Можно изменить ее на public, но суть вопроса остается – менять чуть-чуть в ядре, или дофига, но не касаясь ядра.
September 3rd, 2007 at 12:46
Лучше не касаясь…
p.s. я слез с CakePHP и опять пытаюсь сесть на Zend. Знакомство с CakePHP пошло на пользу, но из-за его поддержки php4 и отсутсвия внятных доков работать невозможно…
September 3rd, 2007 at 22:30
Хех… А я предупреждал! :)
September 4th, 2007 at 10:48
Ну, ковыряние Cake-а пошло на пользу. Буду расширять функционал Zend-а.
September 5th, 2007 at 02:37
Ну давай, только писать о своих наработках не забывай ;)
September 24th, 2007 at 09:55
Это очень легко, на самом деле :)
Просто расширьте класс Zend_Db_Table_Row своим и в классах Тейбл указать его :)
Вот пример из конфига
Или переопределить для всей БД если используется Zend_Db_Table::setRowClass
В общем это очень просто ;)
September 24th, 2007 at 11:10
September 24th, 2007 at 11:12
Есть в доках. Читай внимательней.
Вообще Rowset не обязательно расширять.
September 24th, 2007 at 11:23
Ммм. Если мы будем что-то fetch’ить не по id, то нам нужно будет с Rowset’ом работать, который нам будет подсовывать Zend_Db_Table_Row.
Про доки – я-то нашел, откуда это. Но вот почему-то не помню такого, когда писал этот пост. Хотя может просто просмотрел.
September 24th, 2007 at 11:28
Нет. Не будет. Будет подсовывать ровно то, что укажем в расширении Zend_Db_Table_Abstract.
September 24th, 2007 at 11:38
С какой это стати? Не передается _rowClass от Table’а в Rowset.
Проверить сейчас, правда, не могу.
September 24th, 2007 at 11:42
Проверь ;)
September 24th, 2007 at 11:45
Мне таблицы влом делать щас. Как только сделаю – сразу проверю. В кодах передачи от Table к Rowset _rowClass’а я не увидел.
November 6th, 2007 at 02:02
еще раз убеждаюсь что Zend Framework – это грабли…
November 6th, 2007 at 02:03
Ну значит я не видел в PHP граблей красивее :)
November 6th, 2007 at 02:05
symfony? LIMB?
November 6th, 2007 at 02:08
Не знаю, что такое LIMB. Но по качеству кода ZF гораздо лучше той же симфонии.
November 6th, 2007 at 02:14
limb-project.com
А как вы измеряли качество кода?
November 6th, 2007 at 02:25
Нашел уже. :)
Для начала – не нужно мне “выкать”. Давай на “ты”.
Качественный код, на самом деле, видно издалека, даже не вдаваясь в подробности реализации – оцени, например, Zend_Controller как проектировщик. Я лучше еще не видел.
November 6th, 2007 at 02:41
ИМХО. Front Controller я сделал бы через FilterChain….. да и Router в контроллере не по мне…
ЗЫ. Не буду спорить что Symfony круче ZFW, но она мне понравилась больше из расмотренных мною 4 FW’ов
November 6th, 2007 at 02:43
Смотря для чего.
November 6th, 2007 at 02:53
Framework – для меня нужен для быстрой разработки приложений и последующей развёртки на сервере.
ZFW как библиотека ну уж очень тормазнутая она получается…
November 6th, 2007 at 02:57
Я юзал для работы с POP3 – очень даже удобно.