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?
