Обходной путь для проверки и проверки, была ли форма действительно размещена - PullRequest
0 голосов
/ 01 июня 2011

Вот моя типичная форма

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

Как вы видите - я проверяю, есть ли элемент submit, что означает, что мы действительно разместили форму, а не только запрошенную для первого показа.

Если мы удалим это условие - у нас будут ошибки проверки для запроса на первой странице. Ошибки о пустой форме электронной почты и пароля. Что на самом деле просто неверно.

Так как же решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 01 июня 2011

Вот как я это сделаю, кроме условия:

if (Request::POST === $this->request->method())

было бы более подходящим. Невозможно «пропустить» проверку POST без последствий (например, ошибки в вашем случае).

У нас была дискуссия на эту тему, 5.3, вероятно, добавит больше возможностей. Что-то вроде:

$this->post(function(){
    // do POST-specific stuff 
})
->get(function(){
    // do GET-specific stuff
});
1 голос
/ 01 июня 2011
if ($post = $this->request->post())
{
    $post = Validation::factory($post);
    ...
}
...