Pomoc - Szukaj - U¿ytkownicy - Kalendarz
Pe³na wersja: Symfony - walidacja formularzy
Forum PHP.pl > Forum > PHP > Frameworki
noreek
Wie kto¶ jak zmieniæ wymuszon± nazwê pliku *.yml na wybran± przez siebie?

Chodzi mi o to, ¿e je¶li akcja nazywa siê executeSend() to plik musi siê nazywaæ send.yml. Problem polega na tym, ¿e do jednej akcji bêdê potrzebowa³ pliku o nazwie pobieranej z parametru, czyli send-1.yml.

Wie kto¶ jak to uzyskaæ?
pawel_k
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ć" winksmiley.jpg ) 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:
  1. <?php
  2. if (ModelValidator::validate( $objPropela, $nazwaPlikuYml, $czyDodacBledyDoObiektuSfRequest) ) {
  3. // waliduje się więc zapis do bazy lub coś innego
  4. }
  5. ?>

z Twojego punktu widzenia najważniejsza by była metoda validateParamsYml()
  1. <?php
  2. class ModelValidator
  3. {
  4. private function __construct()
  5. {}
  6.  
  7. public static function validate( BaseObject $objModel, $validationFile = false, $boolAddToRequest = true )
  8. {
  9. $boolValidateResult = $objModel->validate();
  10. if ( $boolValidateResult == false ) {
  11. self::removeErrorsFromRequest();
  12. if ( $boolAddToRequest ) {
  13. self::addErrorsFromModel( $objModel );
  14. }
  15. }
  16.  
  17. $boolYmlValidatorResult = true;
  18.  
  19. if ( $validationFile !== false ) {
  20. $boolYmlValidatorResult = self::validateParamsYml( $validationFile, $boolAddToRequest );
  21. }
  22.  
  23. if ( $boolAddToRequest ) {
  24. self::makeKeysLowerCase();
  25. }
  26.  
  27. return ( $boolValidateResult && $boolYmlValidatorResult );
  28. } // isValid
  29.  
  30.  
  31. private static function removeErrorsFromRequest()
  32. {
  33. $objRequest = sfContext::getInstance()->getRequest();
  34. foreach ( $objRequest->getErrors() as $key => $value ) {
  35. $objRequest->removeError( $key );
  36. }
  37. } // removeErrorsFromRequest
  38.  
  39.  
  40. private static function addErrorsFromModel( $objModel )
  41. {
  42. $objRequest = sfContext::getInstance()->getRequest();
  43. foreach ( $objModel->getValidationFailures() as $objValidationFailure ) {
  44. $column = $objValidationFailure->getColumn();
  45. $arrTmp = explode( '.', $column );
  46. if ( sizeof( $arrTmp ) > 1 ) {
  47. $column = $arrTmp[ sizeof($arrTmp)-];
  48. }
  49. $objRequest->setError( $column, $objValidationFailure->getMessage() );
  50. }
  51. } // addErrorsFromModel
  52.  
  53.  
  54. public static function validateParamsYml( $validationFile, $boolAddToRequest = true )
  55. {
  56. $validated = true;
  57. $validationConfig = sfContext::getInstance()->getModuleName().'/'.sfConfig::get( 'sf_app_module_validate_dir_name' ).'/'.$validationFile.'.yml';
  58.  
  59. if ( null !== $validateFile = sfConfigCache::getInstance()->checkConfig( sfConfig::get( 'sf_app_module_dir_name' ).'/'.$validationConfig, true ) ) {
  60. $context = sfContext::getInstance();
  61. $validatorManager = new sfValidatorManager();
  62. $validatorManager->initialize( $context );
  63. require( $validateFile );
  64. $validated = $validatorManager->execute();
  65. }
  66. if ( ! $boolAddToRequest ) {
  67. self::removeErrorsFromRequest();
  68. }
  69. return $validated;
  70. } // validateParamsYml
  71.  
  72.  
  73. private static function makeKeysLowerCase()
  74. {
  75. $objRequest = sfContext::getInstance()->getRequest();
  76. $arrErrors = $objRequest->getErrors();
  77.  
  78. foreach ( $arrErrors as $key => $value ) {
  79. $objRequest->removeError( $key );
  80. $objRequest->setError( strtolower( $key ), $value );
  81. }
  82. } // makeKeysLowerCase
  83.  
  84. } // class ModelValidator
  85. ?>
To jest wersja lo-fi g³ównej zawarto¶ci. Aby zobaczyæ pe³n± wersjê z wiêksz± zawarto¶ci±, obrazkami i formatowaniem proszê kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.