Here is my typical form
$errors = array();
if ($this->request->post('submit')) { // <----- I don't like this line
$post = Validation::factory($this->request->post())
->rule('email', 'not_empty')
->rule('email', 'email')
->rule('password', 'not_empty');
if ($post->check()) {
// ok, do something
}
$errors = $post->errors(true);
}
$this->template->content = View::factory('auth/register')
->set('errors', $errors);
As you see - I check if there is a submit element which means that we have actually posted form, not just requested for the first show.
If we remove that condition - we will have validation errors for the first page request. The errors about empty email and password form. Which is actually just incorrect.
So how do you solve thi开发者_JAVA技巧s issue?
This is how I'd do it, except for the condition:
if (Request::POST === $this->request->method())
would be more suitable. There is no way to "skip" the POST check without having consequences (like the errors in your case).
We had a discussion on this topic, 5.3 will probably add more features. Something like:
$this->post(function(){
// do POST-specific stuff
})
->get(function(){
// do GET-specific stuff
});
if ($post = $this->request->post())
{
$post = Validation::factory($post);
...
}
精彩评论