W formularzu QuestionForm mam wbudowany formularz AnswerOptionCollForm, a w nim natomiast formularze AnswerOption. Chciałeś stworzyć validator, który sprawdzi czy przynajmniej 3 różne odpowiedzi zostały podane. AnswerOption posiada na razie tylko pole answer (później zamierzam to rozbudować). Aby dany formularz podrzędny był uznany za wypełniony musi być wpisane pole answer. Zrobiłem to tak:
class AnswerOptionValidatorSchema extends sfValidatorSchema { protected function doClean($values) { foreach($values as $key => $value) { if (!$value['answer']) { } } throw new sfValidatorError($this, 'You must give minimum three answer options.'); return $values; } }
Validator został dodanyw taki sposób metodzie configure klasy AnswerOptionCollForm:
if($question->isNew()) { for ($i = 0; $i < $this->getOption('size', 3); $i++) { $answerOption = new AnswerOption(); $answerOption->Question = $question; $this->embedForm($i, $answerOptionForm); } $this->mergePostValidator(new AnswerOptionValidatorSchema()); }
Error wyskakuje ale w takim miejscu, jakby dotyczył pierwszego AnswerOption a nie całości(czyli AnswerOptionCollForm). W ogóle to czy moja klasa validatora potrzebuje dziedziczyć właśnie po sfValidatorSchema? Czemu błąd pojawia się w złym miejscu? Czy ktoś może mi to wytłumaczyć
Po 10 godzinach rozwiązałem problem

if($question->isNew()) { for ($i = 0; $i < $this->getOption('size', 3); $i++) { $answerOption = new AnswerOption(); $answerOption->Question = $question; $this->embedForm($i, $answerOptionForm); // ****** } $this->mergePostValidator(new AnswerOptionValidatorSchema()); }
wystarczyło zmienić ****** linię na
i wszystko już śmiga. Trochę mnie zawiódł ten Framework przyznam. Nie spodziewałem się takiego prostego błędu. Można powiedzieć, że niezły primaaprilis mi sprawił. Czy często się spotykacie z błędami w tym frameworku?
$this->embedForm('a'.$i, $answerOptionForm);