开发者

Workaround for validation and checking if the form has been actually posted

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);
    ...
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜