symfony framework – po polsku






Utwórz nowy temat Odpowiedz w temacie  [ Posty: 2 ] 
Autor Wiadomość
 Tytuł: sfValidatorPropelUnique z sfValidatorPropelChoiceMany
PostNapisane: wtorek, 16 lutego 2010, 10:29 
Avatar użytkownika

Dołączył(a): niedziela, 31 maja 2009, 14:17
Posty: 18
Lokalizacja: Rzeszów
Witam

Mam tablicę z indeksem unikalności na 3 kolumnach i używam poniższego walidatora dodatkowo:

Kod:
    $this->validatorSchema->setPostValidator(
      new sfValidatorPropelUnique(array('model' => 'ProduktPartner',
'column' => array('partner', 'product', 'language')))
    );


Działa jak trzeba, ale chciałbym to zrobić nieco inaczej. Chciałbym mieć formularz gdzie wybieram partnera, produkt i kilka języków dla nich. Następnie zapisuje (co już mam zrobione) to jako oddzielne obiekty. Dla każdego języka ten sam produkt i partner. Niestety tutaj validator nie działa. Wiem, dlaczego, ale nie wiem jak to rozwiązać. Jakieś propozycje?

_________________
Zapraszam na Studio graficzne Pixelforge
Wolną chwilą na Tomasz Ignatiuk blog
Oraz na kraj abrudu


Góra
Offline Zobacz profil  
 
 Tytuł: Re: sfValidatorPropelUnique z sfValidatorPropelChoiceMany
PostNapisane: poniedziałek, 22 lutego 2010, 13:01 
Avatar użytkownika

Dołączył(a): niedziela, 31 maja 2009, 14:17
Posty: 18
Lokalizacja: Rzeszów
Podpowiedź otrzymałem na php.pl:
Kod:
   
public function configure()
  {
  // (...)
  $this->validatorSchema->setPostValidator(
      new sfValidatorCallback(array(
      'callback' => array($this, 'checkUniqueness'),
      'arguments' => array(
        'model' => 'ProduktPartner',
        'multiple_column' => 'jezyki_logo',
        'columns' => array('partner_logo', 'seria_logo', 'jezyki_logo')
        ))));
  }

  public function checkUniqueness($validator, $values, $aArguments)
  {
    //Dla każdej wartości z kolumny multiple_column, która może mieć wiele wartości sprawdza istnienie obiektu
    foreach ($values[$aArguments['multiple_column']] as $one_of_many)
    {
      $criteria = new Criteria();
      //Generuje kryteria oddzielnie dla każdej wartości multiple_column
      foreach ($aArguments['columns'] as $column)
      {
        $colName = call_user_func(array(constant($aArguments['model'].'::PEER'), 'translateFieldName'), $column, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_COLNAME);
        if($column != $aArguments['multiple_column'])
          $criteria->add($colName, $values[$column]); 
        else
          $criteria->add($colName, $one_of_many); 
      }
      //Sprawdza w bazie istnienie takiego obiektu
      $object = call_user_func(array(constant($aArguments['model'].'::PEER'), 'doSelectOne'), $criteria);
     
      //Jeśli istnieje wyrzuca wyjątek
      if(is_object($object))
      {
          $error = new sfValidatorError($validator, sprintf('An object with the same %s "%s" already exist.', $aArguments['multiple_column'], $one_of_many));
          throw new sfValidatorErrorSchema($validator, array('' => $error));     
      }
     }
     return $values; // Jeśli wyjątek nie został rzucony to skrypt zwraca tablicę z przesłanymi wartościami
  }

_________________
Zapraszam na Studio graficzne Pixelforge
Wolną chwilą na Tomasz Ignatiuk blog
Oraz na kraj abrudu


Góra
Offline Zobacz profil  
 
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy temat Odpowiedz w temacie  [ Posty: 2 ] 


Kto przegląda forum

Użytkownicy przeglądający to forum: Brak zalogowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Powered by phpBB