Napisałem kiedyś taką klasę jak niżej, klasa służyła do walidacji obiektów propela za pomocą wbudowanych w niego walidatorów z opcjonalną, dodatkową walidacją z regułami w pliku .yml. nie jest to może coś nadzwyczajnego ani ładnie napisanego (zrobione zostało bardzo szybko i szczerze wstyd mi się tym "chwalić"

) ale pozwala użyć wybranego pliku .yml (parametr $validationFile). Innego sposobu na rozwiązanie Twojego problemu raczej nie widzę...
używasz mniej więcej tak:
<?php
if (ModelValidator::validate( $objPropela, $nazwaPlikuYml, $czyDodacBledyDoObiektuSfRequest) ) {
// waliduje się więc zapis do bazy lub coś innego
}
?>
z Twojego punktu widzenia najważniejsza by była metoda validateParamsYml()
<?php
class ModelValidator
{
private function __construct()
{}
public static function validate
( BaseObject
$objModel, $validationFile = false, $boolAddToRequest = true ) {
$boolValidateResult = $objModel->validate();
if ( $boolValidateResult == false ) {
self::removeErrorsFromRequest();
if ( $boolAddToRequest ) {
self::addErrorsFromModel( $objModel );
}
}
$boolYmlValidatorResult = true;
if ( $validationFile !== false ) {
$boolYmlValidatorResult = self::validateParamsYml( $validationFile, $boolAddToRequest );
}
if ( $boolAddToRequest ) {
self::makeKeysLowerCase();
}
return ( $boolValidateResult && $boolYmlValidatorResult );
} // isValid
private static function removeErrorsFromRequest
() {
$objRequest = sfContext::getInstance()->getRequest();
foreach ( $objRequest->getErrors() as $key => $value ) {
$objRequest->removeError( $key );
}
} // removeErrorsFromRequest
private static function addErrorsFromModel
( $objModel ) {
$objRequest = sfContext::getInstance()->getRequest();
foreach ( $objModel->getValidationFailures() as $objValidationFailure ) {
$column = $objValidationFailure->getColumn();
if ( sizeof( $arrTmp ) > 1
) { $column = $arrTmp[ sizeof($arrTmp)-1
]; }
$objRequest->setError( $column, $objValidationFailure->getMessage() );
}
} // addErrorsFromModel
public static function validateParamsYml
( $validationFile, $boolAddToRequest = true ) {
$validated = true;
$validationConfig = sfContext::getInstance()->getModuleName().'/'.sfConfig::get( 'sf_app_module_validate_dir_name' ).'/'.$validationFile.'.yml';
if ( null !== $validateFile = sfConfigCache::getInstance()->checkConfig( sfConfig::get( 'sf_app_module_dir_name' ).'/'.$validationConfig, true ) ) {
$context = sfContext::getInstance();
$validatorManager = new sfValidatorManager();
$validatorManager->initialize( $context );
require( $validateFile );
$validated = $validatorManager->execute();
}
if ( ! $boolAddToRequest ) {
self::removeErrorsFromRequest();
}
return $validated;
} // validateParamsYml
private static function makeKeysLowerCase
() {
$objRequest = sfContext::getInstance()->getRequest();
$arrErrors = $objRequest->getErrors();
foreach ( $arrErrors as $key => $value ) {
$objRequest->removeError( $key );
$objRequest->setError( strtolower( $key ), $value ); }
} // makeKeysLowerCase
} // class ModelValidator
?>