Symfony 1.4: Validierung für Doctrine Record aktivieren

Nachdem ich mich lange gewundert hatte, warum die Validierung eines eigentlich fehlerhaften Objekts

$niveau = Doctrine::getTable('Niveaus')
    ->findOneByProfilIdAndKompetenzId(
        $profil_id, $id
);
$niveau->setNiveau(20); // Es sind nur Werte im Bereich 1-5 erlaubt
$niveau->isValid();     // gibt dennoch true zurück

nie fehlgeschlagen ist, bin ich jetzt hinter das Ganze gestiegen:

In der Konfiguration des symfony-Plugins sfDoctrinePlugin (das standardmäßig in symfony enthalten ist) steht ganz einfach still und heimlich:

// lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/config/sfDoctrinePluginConfiguration.class.php
 
$manager = Doctrine_Manager::getInstance();
...
$manager->setAttribute(Doctrine_Core::ATTR_VALIDATE, Doctrine_Core::VALIDATE_NONE);

Dies hat zur Folge, dass die Objektvalidierung eines Doctrine_Records nicht aktiv ist und diese einfach "übergangen" wird.

$niveau->isValid();

gibt in diesem Fall einfach "true" zurück. Siehe:

// lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Record.php
 
/**
 * tests validity of the record using the current data.
 *
 * @param boolean $deep   run the validation process on the relations
 * @param boolean $hooks  invoke save hooks before start
 * @return boolean        whether or not this record is valid
 */
public function isValid($deep = false, $hooks = true)
{
    if ( ! $this->_table->getAttribute(Doctrine_Core::ATTR_VALIDATE)) {
        return true;
    }
...

Abhilfe:
Ich habe für mein Projekt die Validierung global aktiviert, so dass ich sie in jeder Applikation des Projekts verwenden kann.

// config/ProjectConfiguration.class.php 
 
// configure doctrine engine
public function configureDoctrine(Doctrine_Manager $manager) {
    // enable validation for doctrine records
    $manager->setAttribute(Doctrine_Core::ATTR_VALIDATE, Doctrine_Core::VALIDATE_ALL);
}

Fertig!

Die Anwendung »sass« ist momentan nicht installiert

Nachdem auch ich sass entdeckt habe, möchte ich doch einen kleinen Stolperstein aus dem Weg räumen, über den ich dummerweise auch gestolpert bin:

Auf der Website von sass heißt es ganz einfach:

gem install sass
sass --watch .:../compiled/

Um Dateien im aktuellen Verzeichnis automatisch bei Änderungen zu übersetzen. Gesagt getan und zack:

Die Anwendung »sass« ist momentan nicht installiert. Sie können es durch folgende Eingabe installieren:
sudo apt-get install libhaml

Einfache Ursache: Das gem-Verzeichnis befindet sind nicht im Pfad.
Lösung:

# add gem executables to path
export PATH=$PATH:/var/lib/gems/1.8/bin

in die .basrc im home-Verzeichnis schreiben, Terminal neu starten und los gehts 😉

mahadi's blog
Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzererfahrung bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst, und hilft unserem Team zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.