Tarihler için CakePHP doğrulama

3 Cevap php

CakePHP, belirli bir aralık içinde olması için bir tarih doğrulama yerleşik bir yolu var mı? Örneğin, belirli bir tarih ileride olduğunu kontrol edin?

Tek seçenek koymak için en iyi dosya olan, oldukça genel ve tüm denetleyicileri için yararlı olacak çünkü, benim kendi özel doğrulama işlevi yazmak ise?

3 Cevap

"CakePHP gelecek tarih doğrulaması" için hızlı bir Google arama bu sayfayı veriyor: http://bakery.cakephp.org/articles/view/more-improved-advanced-validation ("gelecek" için bir sayfa arama yapmak)

(Bağlantıdan) Bu kod ne ihtiyaç yapmalıyım

function validateFutureDate($fieldName, $params)
    {       
        if ($result = $this->validateDate($fieldName, $params))
        {
            return $result;
        }
        $date = strtotime($this->data[$this->name][$fieldName]);        
        return $this->_evaluate($date > time(), "is not set in a future date", $fieldName, $params);
    }

Ben sadece senin modeli sınıfının üzerinde aşağıdaki yerleştirmek emin olun, Kek 2.x kullanarak bu konuda güzel kolay bir düzeltme ile geldi:

App::uses('CakeTime', 'Utility');

Aşağıdaki gibi bir geçerlilik kuralı kullanabilirsiniz:

public $validate = array(
    'deadline' => array(
        'date' => array(
            'rule' => array('date', 'ymd'),
            'message' => 'You must provide a deadline in YYYY-MM-DD format.',
            'allowEmpty' => true
        ),
        'future' => array(
            'rule' => array('checkFutureDate'),
            'message' => 'The deadline must be not be in the past'
        )
    )
);

Nihayet özel doğrulama kuralı:

/**
 * checkFutureDate
 * Custom Validation Rule: Ensures a selected date is either the
 * present day or in the future.
 *
 * @param array $check Contains the value passed from the view to be validated
 * @return bool False if in the past, True otherwise
 */
public function checkFutureDate($check) {
    $value = array_values($check);
    return CakeTime::fromString($value['0']) >= CakeTime::fromString(date('Y-m-d'));
}