Проверка норм Кохана - PullRequest
       36

Проверка норм Кохана

0 голосов
/ 13 января 2012

У меня полностью рабочий скрипт проверки, моя проблема в том, что я не могу получить пользовательские сообщения об ошибках

Вот моя функция для регистрации: http://pastebin.com/ZF3UVxUr

А вот мой массив сообщений: http://pastebin.com/d9GUvM3N

Мой скрипт сообщений находится в: \application\messages\registration.php Есть предложения?

Извините за длинный код, просто пропустите html и другие вещи

Ответы [ 2 ]

2 голосов
/ 14 января 2012

Если вы ловите исключение проверки, которое выдается моделью User, то, скорее всего, ваше местоположение файла сообщений неверно.Это должно быть: 'registration / user.php'.

// ./application/messages/registration/user.php
return array(
    'name' => array(
        'not_empty' => 'Please enter your username.',
    ),
    'password' => array(
        'matches' => 'Passwords doesn\'t match',
        'not_empty' => 'Please enter your password'
    ),
    'email' => array(
        'email' => 'Your email isn\'t valid',
        'not_empty' => 'Please enter your email'
    ),
    'about-me' => array(
        'max_length' => 'You cann\'ot exceed 300 characters limit'
    ),
    '_external' => array(
        'username' => 'This username already exist'
    )
);

Кроме того, вопреки ответу Майкла П, вы должны сохранить всю логику проверки в модели.Код вашего контроллера для регистрации нового пользователя должен быть таким простым:

try
{
  $user->register($this->request->post());

  Auth::instance()->login($this->request->post('username'), $this->request->post('password'));
}
catch(ORM_Validation_Exception $e) 
{
  $errors = $e->errors('registration');
}
1 голос
/ 14 января 2012

Вы должны проверить данные поста, прежде чем пытаться поразить какие-либо модели. Ваши правила проверки не выполняются, потому что вы не выполнили проверку () .

Я бы сделал что-то вроде:

// ./application/classes/controller/user
class Controller_User extends Controller
{

    public function action_register()
    {

        if (isset($_POST) AND Valid::not_empty($_POST)) {
            $post = Validation::factory($_POST)
                ->rule('name', 'not_empty');

            if ($post->check()) {
                try {
                    echo 'Success';
                    /**
                    * Post is successfully validated, do ORM
                    * stuff here
                    */
                } catch (ORM_Validation_Exception $e) {
                    /**
                    * Do ORM validation exception stuff here
                    */
                }
            } else {
                /**
                * $post->check() failed, show the errors
                */
                $errors = $post->errors('registration');

                print '';
                print_r($errors);
                print '
'; } } } }

Registration.php остается в основном таким же, за исключением исправления ошибки правописания длины, которую вы имели:

// ./application/messages/registration.php
return array(
    'name' => array(
        'not_empty' => 'Please enter your username.',
    ),
    'password' => array(
        'matches' => 'Passwords doesn\'t match',
        'not_empty' => 'Please enter your password'
    ),
    'email' => array(
        'email' => 'Your email isn\'t valid',
        'not_empty' => 'Please enter your email'
    ),
    'about-me' => array(
        'max_length' => 'You cann\'ot exceed 300 characters limit'
    ),
    '_external' => array(
        'username' => 'This username already exist'
    )
);

Затем, отправив пустое поле 'name', вы получите:

Array
(
    [name] => Please enter your username.
)
...