Custom sfValidatorCallback errors

Discussion specific to symfony 1.1.x stable

Moderator: hartym

Custom sfValidatorCallback errors

Postby lisson01 » Fri May 23, 2008 3:30 pm

I have the followin form class:
<span name="php"><code><span style="color: #000000">
<span style="color: #0000BB"><?php </span><span style="color: #007700">class </span><span style="color: #0000BB">loginForm </span><span style="color: #007700">extends </span><span style="color: #0000BB">sfForm </span><span style="color: #007700">{   private function </span><span style="color: #0000BB">_setValidators</span><span style="color: #007700">() {     </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">oValGebruikersnaam </span><span style="color: #007700">= new </span><span style="color: #0000BB">sfValidatorAnd</span><span style="color: #007700">(       array(         new </span><span style="color: #0000BB">sfValidatorString</span><span style="color: #007700">(           array(</span><span style="color: #DD0000">'min_length' </span><span style="color: #007700">=> </span><span style="color: #0000BB">3</span><span style="color: #007700">, </span><span style="color: #DD0000">'max_length' </span><span style="color: #007700">=> </span><span style="color: #0000BB">50</span><span style="color: #007700">),           array(</span><span style="color: #DD0000">'min_length' </span><span style="color: #007700">=> </span><span style="color: #DD0000">'The username should be at least three characters long'</span><span style="color: #007700">,                 </span><span style="color: #DD0000">'max_length' </span><span style="color: #007700">=> </span><span style="color: #DD0000">'The username should be fifty characters long at most'</span><span style="color: #007700">,           )         ),         new </span><span style="color: #0000BB">sfValidatorCallback</span><span style="color: #007700">(           array(             </span><span style="color: #DD0000">'callback' </span><span style="color: #007700">=> array(</span><span style="color: #DD0000">'myLoginValidator'</span><span style="color: #007700">, </span><span style="color: #DD0000">'execute'</span><span style="color: #007700">),             </span><span style="color: #DD0000">'arguments' </span><span style="color: #007700">=> array()           ),           array(</span><span style="color: #DD0000">'invalid'  </span><span style="color: #007700">=> </span><span style="color: #DD0000">'This username/password combination is unknown'</span><span style="color: #007700">)         ),       ),       array(</span><span style="color: #DD0000">'required'   </span><span style="color: #007700">=> </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">),       array(</span><span style="color: #DD0000">'required'   </span><span style="color: #007700">=> </span><span style="color: #DD0000">'The username is mandatory'</span><span style="color: #007700">)     );       </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">oValWachtwoord </span><span style="color: #007700">= new </span><span style="color: #0000BB">sfValidatorString</span><span style="color: #007700">(       array(</span><span style="color: #DD0000">'required' </span><span style="color: #007700">=> </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">),       array(</span><span style="color: #DD0000">'required' </span><span style="color: #007700">=> </span><span style="color: #DD0000">'The password is mandatory'</span><span style="color: #007700">)     );          </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">oValReferrer </span><span style="color: #007700">= new </span><span style="color: #0000BB">sfValidatorString</span><span style="color: #007700">(array(</span><span style="color: #DD0000">'required' </span><span style="color: #007700">=> </span><span style="color: #0000BB">FALSE</span><span style="color: #007700">));   }        private function </span><span style="color: #0000BB">_setWidgets</span><span style="color: #007700">() {     </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">oWidGebruikersnaam </span><span style="color: #007700">= new </span><span style="color: #0000BB">sfWidgetFormInput</span><span style="color: #007700">(array(), array(</span><span style="color: #DD0000">'id' </span><span style="color: #007700">=> </span><span style="color: #DD0000">'gebruikersnaam'</span><span style="color: #007700">, </span><span style="color: #DD0000">'size' </span><span style="color: #007700">=> </span><span style="color: #0000BB">25</span><span style="color: #007700">));     </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">oWidWachtwoord     </span><span style="color: #007700">= new </span><span style="color: #0000BB">sfWidgetFormInputPassword</span><span style="color: #007700">(array(), array(</span><span style="color: #DD0000">'id' </span><span style="color: #007700">=> </span><span style="color: #DD0000">'wachtwoord'</span><span style="color: #007700">, </span><span style="color: #DD0000">'size' </span><span style="color: #007700">=> </span><span style="color: #0000BB">10</span><span style="color: #007700">));     </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">oWidReferrer       </span><span style="color: #007700">= new </span><span style="color: #0000BB">sfWidgetFormInputHidden</span><span style="color: #007700">(array(), array(</span><span style="color: #DD0000">'id' </span><span style="color: #007700">=> </span><span style="color: #DD0000">'referrer'</span><span style="color: #007700">));   }     public function </span><span style="color: #0000BB">configure</span><span style="color: #007700">() {     </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">_setValidators</span><span style="color: #007700">();     </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">_setWidgets</span><span style="color: #007700">();     </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">setValidators</span><span style="color: #007700">(array(       </span><span style="color: #DD0000">'gebruikersnaam' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">oValGebruikersnaam</span><span style="color: #007700">,       </span><span style="color: #DD0000">'wachtwoord'     </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">oValWachtwoord</span><span style="color: #007700">,       </span><span style="color: #DD0000">'referrer'       </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">oValReferrer</span><span style="color: #007700">,       )     );       </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">setWidgets</span><span style="color: #007700">(array(       </span><span style="color: #DD0000">'gebruikersnaam' </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">oWidGebruikersnaam</span><span style="color: #007700">,       </span><span style="color: #DD0000">'wachtwoord'     </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">oWidWachtwoord</span><span style="color: #007700">,       </span><span style="color: #DD0000">'referrer'       </span><span style="color: #007700">=> </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">oWidReferrer</span><span style="color: #007700">,       )     );       </span><span style="color: #0000BB">$oDecorator </span><span style="color: #007700">= new </span><span style="color: #0000BB">sfWidgetFormSchemaFormatterDiv</span><span style="color: #007700">(</span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">getWidgetSchema</span><span style="color: #007700">());     </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">getWidgetSchema</span><span style="color: #007700">()-></span><span style="color: #0000BB">addFormFormatter</span><span style="color: #007700">(</span><span style="color: #DD0000">'div'</span><span style="color: #007700">, </span><span style="color: #0000BB">$oDecorator</span><span style="color: #007700">);     </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">getWidgetSchema</span><span style="color: #007700">()-></span><span style="color: #0000BB">setFormFormatterName</span><span style="color: #007700">(</span><span style="color: #DD0000">'div'</span><span style="color: #007700">);   }     </span><span style="color: #FF8000">/**    * Bind override    */   </span><span style="color: #007700">public function </span><span style="color: #0000BB">bind</span><span style="color: #007700">(array </span><span style="color: #0000BB">$taintedValues </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">, array </span><span style="color: #0000BB">$taintedFiles </span><span style="color: #007700">= array()) {     </span><span style="color: #0000BB">$request </span><span style="color: #007700">= </span><span style="color: #0000BB">sfContext</span><span style="color: #007700">::</span><span style="color: #0000BB">getInstance</span><span style="color: #007700">()-></span><span style="color: #0000BB">getRequest</span><span style="color: #007700">();     if (</span><span style="color: #0000BB">$request</span><span style="color: #007700">-></span><span style="color: #0000BB">hasParameter</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">$CSRFFieldName</span><span style="color: #007700">))         {       </span><span style="color: #0000BB">$taintedValues</span><span style="color: #007700">[</span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">$CSRFFieldName</span><span style="color: #007700">] = </span><span style="color: #0000BB">$request</span><span style="color: #007700">-></span><span style="color: #0000BB">getParameter</span><span style="color: #007700">(</span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">$CSRFFieldName</span><span style="color: #007700">);     }     </span><span style="color: #0000BB">parent</span><span style="color: #007700">::</span><span style="color: #0000BB">bind</span><span style="color: #007700">(</span><span style="color: #0000BB">$taintedValues</span><span style="color: #007700">, </span><span style="color: #0000BB">$taintedFiles</span><span style="color: #007700">);   } } </span><span style="color: #0000BB">?></span>
</span>
</code></span>
Thanks to Jordi Backx.

And the following custom myLoginValidator
<span name="php"><code><span style="color: #000000">
<span style="color: #0000BB"><?php </span><span style="color: #007700">class </span><span style="color: #0000BB">myLoginValidator </span><span style="color: #007700">{   </span><span style="color: #FF8000">/**    * execute validator    *    * @param sfValidatorBase Validator instance that calls  this method    * @param string Value of field that sfValidatorCallback  checks    * @param array Arguments for correct working    *    * @return value field when OK. Nothing if error (sfValidatorError  exception)    */   </span><span style="color: #007700">public static function </span><span style="color: #0000BB">execute </span><span style="color: #007700">(</span><span style="color: #0000BB">$oValidator</span><span style="color: #007700">, </span><span style="color: #0000BB">$sValue</span><span style="color: #007700">, </span><span style="color: #0000BB">$aArguments</span><span style="color: #007700">) {     </span><span style="color: #0000BB">$req </span><span style="color: #007700">= </span><span style="color: #0000BB">sfContext</span><span style="color: #007700">::</span><span style="color: #0000BB">getInstance</span><span style="color: #007700">()-></span><span style="color: #0000BB">getRequest</span><span style="color: #007700">();     </span><span style="color: #0000BB">$gebruikersnaam </span><span style="color: #007700">= </span><span style="color: #0000BB">$req</span><span style="color: #007700">-></span><span style="color: #0000BB">getParameter</span><span style="color: #007700">(</span><span style="color: #DD0000">'gebruikersnaam'</span><span style="color: #007700">);     </span><span style="color: #0000BB">$wachtwoord     </span><span style="color: #007700">= </span><span style="color: #0000BB">$req</span><span style="color: #007700">-></span><span style="color: #0000BB">getParameter</span><span style="color: #007700">(</span><span style="color: #DD0000">'wachtwoord'</span><span style="color: #007700">);          </span><span style="color: #0000BB">$c </span><span style="color: #007700">= new </span><span style="color: #0000BB">Criteria</span><span style="color: #007700">();     </span><span style="color: #0000BB">$c</span><span style="color: #007700">-></span><span style="color: #0000BB">add</span><span style="color: #007700">(</span><span style="color: #0000BB">UserPeer</span><span style="color: #007700">::</span><span style="color: #0000BB">USERNAME</span><span style="color: #007700">, </span><span style="color: #0000BB">$gebruikersnaam</span><span style="color: #007700">);     </span><span style="color: #0000BB">$user </span><span style="color: #007700">= </span><span style="color: #0000BB">UserPeer</span><span style="color: #007700">::</span><span style="color: #0000BB">doSelectOne</span><span style="color: #007700">(</span><span style="color: #0000BB">$c</span><span style="color: #007700">);          if(</span><span style="color: #0000BB">$user</span><span style="color: #007700">){       if(</span><span style="color: #0000BB">sha1</span><span style="color: #007700">(</span><span style="color: #0000BB">$user</span><span style="color: #007700">-></span><span style="color: #0000BB">getSalt</span><span style="color: #007700">().</span><span style="color: #0000BB">$wachtwoord</span><span style="color: #007700">) == </span><span style="color: #0000BB">$user</span><span style="color: #007700">-></span><span style="color: #0000BB">getSha1Password</span><span style="color: #007700">()){         </span><span style="color: #FF8000">//Login Ok.         </span><span style="color: #007700">if(</span><span style="color: #0000BB">$user</span><span style="color: #007700">-></span><span style="color: #0000BB">getActivated</span><span style="color: #007700">() === </span><span style="color: #0000BB">false</span><span style="color: #007700">){           throw new </span><span style="color: #0000BB">sfValidatorError</span><span style="color: #007700">(</span><span style="color: #0000BB">$oValidator</span><span style="color: #007700">, </span><span style="color: #DD0000">'inactive'</span><span style="color: #007700">); </span><span style="color: #FF8000">// Account inactive         </span><span style="color: #007700">} else {           return </span><span style="color: #0000BB">$sValue</span><span style="color: #007700">; </span><span style="color: #FF8000">// Account active.         </span><span style="color: #007700">}             }     }     </span><span style="color: #FF8000">// Throw exception when not OK     </span><span style="color: #007700">throw new </span><span style="color: #0000BB">sfValidatorError</span><span style="color: #007700">(</span><span style="color: #0000BB">$oValidator</span><span style="color: #007700">, </span><span style="color: #DD0000">'invalid'</span><span style="color: #007700">);   } } </span><span style="color: #0000BB">?></span>
</span>
</code></span>

I want throw new sfValidatorError($oValidator, 'inactive'); to produce an error on my form, where the complete message can be stored in the loginForm.class.php. In that case, everything related to maintenance of the form is in one place.

And a second question, i want the $user object to be available in my controller. Because i use a function $this->getUser()->signIn($user); to store the users name, id and some other stuff in the user's session. How can i access that object in my controller?

A third question:
<span name="php"><code><span style="color: #000000">
<span style="color: #0000BB"><?php $req </span><span style="color: #007700">= </span><span style="color: #0000BB">sfContext</span><span style="color: #007700">::</span><span style="color: #0000BB">getInstance</span><span style="color: #007700">()-></span><span style="color: #0000BB">getRequest</span><span style="color: #007700">();     </span><span style="color: #0000BB">$gebruikersnaam </span><span style="color: #007700">= </span><span style="color: #0000BB">$req</span><span style="color: #007700">-></span><span style="color: #0000BB">getParameter</span><span style="color: #007700">(</span><span style="color: #DD0000">'gebruikersnaam'</span><span style="color: #007700">);     </span><span style="color: #0000BB">$wachtwoord     </span><span style="color: #007700">= </span><span style="color: #0000BB">$req</span><span style="color: #007700">-></span><span style="color: #0000BB">getParameter</span><span style="color: #007700">(</span><span style="color: #DD0000">'wachtwoord'</span><span style="color: #007700">); </span><span style="color: #0000BB">?></span>
</span>
</code></span>
is there an easier way of accessing the form posted fields (they are available in the oValidator right?
lisson01
Member
 
Posts: 85
Joined: Thu Jan 31, 2008 2:42 pm

Re: Custom sfValidatorCallback errors

Postby lisson01 » Fri May 23, 2008 4:06 pm

Ok, if found the answer to one of my questions. And partially to the others.
<span name="php"><code><span style="color: #000000">
<span style="color: #0000BB"><?php $gebruikersnaam </span><span style="color: #007700">= </span><span style="color: #0000BB">$sValue</span><span style="color: #007700">; </span><span style="color: #0000BB">$wachtwoord     </span><span style="color: #007700">= </span><span style="color: #0000BB">sfContext</span><span style="color: #007700">::</span><span style="color: #0000BB">getInstance</span><span style="color: #007700">()-></span><span style="color: #0000BB">getRequest</span><span style="color: #007700">()-></span><span style="color: #0000BB">getParameter</span><span style="color: #007700">(</span><span style="color: #DD0000">'wachtwoord'</span><span style="color: #007700">); </span><span style="color: #0000BB">?></span>
</span>
</code></span>

the gebruikersnaam is ofcourse the $sValue (since that is the form field on which the validator is placed). The password (wachtwoord in dutch) is the password which i need to get from the Request object. Is there another way for this?

<span name="php"><code><span style="color: #000000">
<span style="color: #0000BB"><?php </span><span style="color: #007700">if(</span><span style="color: #0000BB">$user</span><span style="color: #007700">){       if(</span><span style="color: #0000BB">sha1</span><span style="color: #007700">(</span><span style="color: #0000BB">$user</span><span style="color: #007700">-></span><span style="color: #0000BB">getSalt</span><span style="color: #007700">().</span><span style="color: #0000BB">$wachtwoord</span><span style="color: #007700">) == </span><span style="color: #0000BB">$user</span><span style="color: #007700">-></span><span style="color: #0000BB">getSha1Password</span><span style="color: #007700">()){         </span><span style="color: #FF8000">//Login Ok.         </span><span style="color: #007700">if(</span><span style="color: #0000BB">$user</span><span style="color: #007700">-></span><span style="color: #0000BB">getActivated</span><span style="color: #007700">() === </span><span style="color: #0000BB">false</span><span style="color: #007700">){           throw new </span><span style="color: #0000BB">sfValidatorError</span><span style="color: #007700">(</span><span style="color: #0000BB">$oValidator</span><span style="color: #007700">, </span><span style="color: #DD0000">'inactive'</span><span style="color: #007700">); </span><span style="color: #FF8000">// Account inactive         </span><span style="color: #007700">} else {           return </span><span style="color: #0000BB">$user</span><span style="color: #007700">; </span><span style="color: #FF8000">// Account active.         </span><span style="color: #007700">}             }     } </span><span style="color: #0000BB">?></span>
</span>
</code></span>

Instead of returning the $sValue after successful validation, i return my $user object. Then in the controller i use:
<span name="php"><code><span style="color: #000000">
<span style="color: #0000BB"><?php $aValues </span><span style="color: #007700">= </span><span style="color: #0000BB">$form</span><span style="color: #007700">-></span><span style="color: #0000BB">getValues</span><span style="color: #007700">(); </span><span style="color: #0000BB">$this</span><span style="color: #007700">-></span><span style="color: #0000BB">getUser</span><span style="color: #007700">()-></span><span style="color: #0000BB">signIn</span><span style="color: #007700">(</span><span style="color: #0000BB">$aValues</span><span style="color: #007700">[</span><span style="color: #DD0000">'gebruikersnaam'</span><span style="color: #007700">]); </span><span style="color: #0000BB">?></span>
</span>
</code></span>

the $aValues['gebruikersnaam'] should normally contain the form field value, but in my case it contains the entire user object which i can now use to set my user's sessions vars.

So, outstanding question is: custom error messages for the sfValidatorCallBack.
lisson01
Member
 
Posts: 85
Joined: Thu Jan 31, 2008 2:42 pm

Re: Custom sfValidatorCallback errors

Postby lisson01 » Mon May 26, 2008 1:57 pm

So, outstanding question is: custom error messages for the sfValidatorCallBack.

Anyone?
lisson01
Member
 
Posts: 85
Joined: Thu Jan 31, 2008 2:42 pm

Re: Custom sfValidatorCallback errors

Postby hamidp » Wed Jun 11, 2008 5:34 pm

lisson01 wrote: So, outstanding question is: custom error messages for the sfValidatorCallBack.

Anyone?


Here is how I did it:

<span name="php"><code><span style="color: #000000">
<span style="color: #0000BB"><?php </span><span style="color: #007700">new </span><span style="color: #0000BB">sfValidatorCallback</span><span style="color: #007700">(array(</span><span style="color: #DD0000">'callback'  </span><span style="color: #007700">=> array(</span><span style="color: #DD0000">'passwordValidator'</span><span style="color: #007700">, </span><span style="color: #DD0000">'execute'</span><span style="color: #007700">),                                                                     </span><span style="color: #DD0000">'arguments' </span><span style="color: #007700">=> array()                                                              ),                                                              array(</span><span style="color: #DD0000">'invalid'   </span><span style="color: #007700">=> </span><span style="color: #DD0000">'The two passwords you have entered do not match.'</span><span style="color: #007700">) </span><span style="color: #0000BB">?></span>
</span>
</code></span>
Last edited by hamidp on Wed Jun 11, 2008 5:35 pm, edited 1 time in total.
hamidp
Junior Member
 
Posts: 8
Joined: Fri Aug 10, 2007 2:48 pm


Return to symfony 1.1

Who is online

Users browsing this forum: No registered users and 1 guest