验证和检查表单是否已实际发布的解决方法

时间:2011-06-01 12:34:59

标签: php kohana

这是我的典型表格

        $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);

如您所见 - 我检查是否有提交元素,这意味着我们实际上已经发布了表单,而不仅仅是第一个节目的请求。

如果我们删除该条件 - 我们将对第一页请求有验证错误。关于空电子邮件和密码表单的错误。这实际上是不正确的。

那么你如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

除了条件:

之外,我就是这样做的
if (Request::POST === $this->request->method())

会更合适。没有任何方法可以“跳过”POST检查而不会产生任何后果(例如您的错误)。

我们讨论过这个话题,5.3可能会添加更多功能。类似的东西:

$this->post(function(){
    // do POST-specific stuff 
})
->get(function(){
    // do GET-specific stuff
});

答案 1 :(得分:1)

if ($post = $this->request->post())
{
    $post = Validation::factory($post);
    ...
}