Kohana 3 Doğrulama kütüphane hataları ekleme ile sorun

3 Cevap php

Ben Kohana 3 Doğrulama helper'a bazı hatalar eklemek gerekir.

İşte başlamak budur:

            // validate form
             $post = Validate::factory($_POST)
            // Trim all fields
            ->filter(TRUE, 'trim')
            // Rules for name
            ->rule('first-name', 'not_empty')
            ->rule('last-name', 'not_empty')

            // Rules for email address
            ->rule('email', 'not_empty')
            ->rule('email', 'email')

            // Rules for address stuff
            ->rule('address', 'not_empty')
            ->rule('suburb', 'not_empty')
            ->rule('state', 'not_empty')
            ->rule('postcode', 'not_empty')

            // Rules for misc
            ->rule('phone', 'not_empty')
            ->rule('company', 'not_empty')
            ->rule('abn', 'not_empty');

Bir sorunla karşılaştı Şimdi, eğer ben de bazı şeyleri kontrol ve add hataları

         if ( ! in_array($post['state'], array_keys($states))) {
                $post->error('state', 'not_found');
            }


            if ( $this->userModel->doesEmailExist($post['email'])) {
                $post->error('email', 'already_exists');
        }

Ben bu bazı var_dump() yaptık ve are hatayı eklemek gerekir değerleri döndüren!

I $post->check() çağırdığınızda Ancak, sadece yukarıda ilk kod bloğu eklenen kurallara yukarıdaki doğrular gibi görünüyor.

Benim / uygulama / mesajları / join.php da eşleşen değerleri var

<?php defined('SYSPATH') or die('No direct script access.');

return array(
    'not_empty'    => ':field must not be empty.',
    'matches'      => ':field must be the same as :param1',
    'regex'        => ':field does not match the required format',
    'exact_length' => ':field must be exactly :param1 characters long',
    'min_length'   => ':field must be at least :param1 characters long',
    'max_length'   => ':field must be less than :param1 characters long',
    'in_array'     => ':field must be one of the available options',
    'digit'        => ':field must be a digit',
    'email'        => array(
        'email' => 'You must enter a valid email.',
        'already_exists' => 'This email is already associated with an account'
    ),

    'name'         => 'You must enter your name.',
);

Burada yanlış bir şey yapıyorum? Teşekkürler

Update

Ben sadece yani error yöntemi her görüşmeden sonra _errors özelliğini damping, Doğrulama kütüphanede bir kaç hızlı hata ayıklama şeyler yaptım.

Görebildiğim kadarıyla, benim hataları ilave ediliyor, ama sonra (belki de ben yukarıda eklenen kuralları ile çelişen) yazılır ediliyor olmasıdır. Bu normal midir?

3 Cevap

(Eğer çekirdek kesmek istemiyorsanız) alternatif bir yol olarak, bunun yerine geri doğrulayıcılar kullanabilirsiniz. Sonra kodu gibi görünecektir:

    $post->callback('state', array($this, 'doesStateExist'));
    $post->callback('email', array($this->userModel, 'doesEmailExist'));

Her zaman $validate->check() kendi kontrolleri yapıyor ve hataları eklemeden önce çalışmalıdır. meze'nın cevap daha iyi olurdu.

Ben hata iletileri eklemek için başka bir yol buldu:

$errors = array();

if (!$post->check()) {
   $errors += $post->errors();
}

if (!isset($_POST['something'])) {
   $errors['something'] = 'Please enter something';
}

if (empty($errors)) {
  $orm->save();
  return;
}

$tpl->error_fields($errors);