Я пытаюсь заставить symfony использовать собственный класс jsDoctrineRecord
вместо sfDoctrineRecord
для своих моделей. Вот код для переопределяющего класса:
<?php abstract class jsDoctrineRecord extends sfDoctrineRecord { public function foo() { echo 'foo';exit; } }
Вот что я имею в config/ProjectConfiguration.class.php
, в соответствии с инструкциями здесь :
<?php require_once dirname(__FILE__).'/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php'; sfCoreAutoload::register(); class ProjectConfiguration extends sfProjectConfiguration { public function setup() { $this->enablePlugins('sfDoctrinePlugin'); $this->enablePlugins('sfDoctrineGuardPlugin'); $this->enablePlugins('jsDoctrineSchemaOverriderPlugin'); } public function configureDoctrine(Doctrine_Manager $manager) { $options = array('baseClassName' => 'jsDoctrineRecord'); sfConfig::set('doctrine_model_builder_options', $options); } }
К сожалению, это не работает. Мои модели продолжают наследовать от sfDoctrineRecord
вместо jsDoctrineRecord
. Метод foo()
не распознается. У меня все еще проблема, когда я очищаю свой кеш.
Я почти уверен, что правильно следую инструкциям, так что может быть не так?
Вам необходимо перестроить модель, чтобы классы базовой записи расширили ваш новый класс записи. Запуск доктрины: build-model.
Я не уверен, что он не работает, поскольку он все еще существует для BC, но, посмотрев на sfDoctrinePlugin, похоже, что правильный способ справиться с этим – это прослушиватель событий symfony (см. Строки 83 – 89 из SF_LIB_DIR/plugins/sfDoctrinePlugin/config/sfDoctrinePluginConfiguration.class.php
):
в projectConfiguration:
public function setup() { $this->enablePlugins('sfDoctrinePlugin'); $this->enablePlugins('sfDoctrineGuardPlugin'); $this->enablePlugins('jsDoctrineSchemaOverriderPlugin'); $this->dispatcher->connect( 'doctrine.filter_model_builder_options', array($this, 'configureDoctrineBuildOptions') ); } public function configureDoctrineBuildOptions(sfEvent $event, $options) { $options['baseClassName'] = 'jsDoctrineRecord'; return $options; }
Дайте ему выстрел и посмотрите, не изменилось ли это.