2010-12-08 4 views
3

Ich versuche Symfony zu verwenden, um eine benutzerdefinierte Klasse namens jsDoctrineRecord anstelle von sfDoctrineRecord für seine Modelle zu verwenden. Hier ist der Code für die übergeordnete Klasse:Ändern der Modellerstellungsoptionen nicht möglich

<?php 
abstract class jsDoctrineRecord extends sfDoctrineRecord 
{ 
    public function foo() 
    { 
    echo 'foo';exit; 
    } 
} 

Hier ist, was ich in config/ProjectConfiguration.class.php haben, gemäß den Anweisungen here:

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

Leider ist dies nicht funktioniert. Meine Modelle erben weiterhin von sfDoctrineRecord anstelle von jsDoctrineRecord. Die Methode foo() wird nicht erkannt. Ich habe immer noch das Problem, wenn ich meinen Cache lösche.

Ich bin mir ziemlich sicher, dass ich die Anweisungen richtig befolge, also was könnte schief gehen?

+1

Nur um sicher zu gehen ... Sie haben die Modelle umgebaut, oder? (Doktrin: Build-Modell) –

+0

Nein, das hatte ich nicht getan. Ich habe das gerade gemacht und jetzt funktioniert es. Vielen Dank! Wenn du das als Antwort aufsetzen willst, werde ich es akzeptieren. –

Antwort

3

Sie müssen das Modell neu erstellen, damit die Basisdatensatzklassen Ihre neue Datensatzklasse erweitern. Run Doktrin: Build-Modell.

4

Ich bin nicht sicher whay das ist nicht wie seine Arbeit immer noch da für BC, aber nach an der sfDoctrinePlugin sucht es sieht aus wie die richtige Art und Weise zu handhaben ist mit symfony event listener (siehe Zeilen 83-89 von SF_LIB_DIR/plugins/sfDoctrinePlugin/config/sfDoctrinePluginConfiguration.class.php):

in Project:

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

geben, dass ein Schuss und sehen, ob es einen Unterschied macht.

+0

Vielen Dank für die Buchung des Quellorts. Muy hilfreich! Was ist "BC" in diesem Zusammenhang? –

+1

@Phoneix: BC = Abwärtskompatibilität. – prodigitalson

Verwandte Themen