Добавление (или переопределение) метода базового класса в cakePHP
Мы используем cakePHP 2.7.x.
Вопрос, который у меня возникает, заключается в переопределении базового класса или в конкретном добавлении функциональности в метод без изменения базового кода.
Мне нужно добавить некоторые функции в метод:cake/lib/Cake/Model/Datasource/DboSource->BuildColumn()
В документах говорится, что весь класс должен находиться в одном и том же месте приложения, а затем загрузчик приложения загрузит его. Поэтому я скопировал класс вmarketplace/Model/Datasource/DboSource
и добавил мой фрагмент кода. К сожалению, ничего не изменилось.
Если я добавлю свое изменение непосредственно в исходный метод, все будет работать нормально.
Контекст: внутри этого метода все значения по умолчанию заключаются в кавычки без разбора. Поэтому что-то вроде DEFAULT CURRENT_TIMESTAMP
интерпретируется и работает как DEFAULT 'CURRENT_TIMESTAMP'
что, очевидно, не работает, как задумано. В частности, это дает мне ошибку "Syntax error or access violation: 1067 Invalid default value for 'created'"
при попытке испечь пирог.
Я был направлен на причину проблемы и предлагаем исправление для cakePHP 1.2.6, здесь: http://mamchenkov.net/wordpress/2010/04/21/unit-tests-with-cakephp/
2 ответа
Согласно документам:
Вы можете переопределить почти каждый класс в рамках, за исключением классов App и Configure. Всякий раз, когда вы хотите выполнить такое переопределение, просто добавьте свой класс в папку app/Lib, имитирующую внутреннюю структуру фреймворка.
Так что путь должен быть marketplace/Lib/Model/Datasource/DboSource
не marketplace/Model/Datasource/DboSource
Так что, видимо, что-то произошло с моей бродячей машиной. После того, как я перезапустил это, работа, как Бруно Ферриера обрисовал в общих чертах, работает отлично!