Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Symfony - walidacja formularzy
noreek
post 26.03.2008, 12:24:28
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 7.05.2007

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 1)
pawel_k
post 29.03.2008, 00:38:34
Post #2





Grupa: Zarejestrowani
Postów: 211
Pomógł: 3
Dołączył: 29.07.2005
Skąd: Szczebrzeszyn

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował pawel_k 29.03.2008, 00:42:20
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:57