Не могу изменить параметры построителя модели - PullRequest
3 голосов
/ 09 декабря 2010

Я пытаюсь заставить 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() не распознается. У меня все еще есть проблема, когда я очищаю свой кеш.

Я почти уверен, что правильно следую инструкциям, так что может быть не так?

Ответы [ 2 ]

4 голосов
/ 09 декабря 2010

Я не уверен, почему это не работает, поскольку он все еще там для BC, но после просмотра sfDoctrinePlugin, похоже, что правильный способ справиться с этим - с помощью обработчика событий Symfony (см. Строки 83 - 89 из SF_LIB_DIR/plugins/sfDoctrinePlugin/config/sfDoctrinePluginConfiguration.class.php):

в проекте Конфигурация:

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;
}

Сделайте снимок и посмотрите, имеет ли это значение.

3 голосов
/ 09 декабря 2010

Вам необходимо перестроить модель, чтобы базовые классы записей расширяли ваш новый класс записей.Запустить учение: build-model.

...