Zend Framework formda bir datetime doğrulayıcı oluşturmak nasıl?

2 Cevap php

Varsayılan olarak, bir Zend Framework tarih doğrulayıcı tarih biçimini kullanan yyyy-MM-dd:

$dateValidator = new Zend_Validate_Date();

Ama saat ve dakika doğrulama eklemek istiyorum. Diğer bir deyişle, ben saat ve dakika girmek için kullanıcı gerektiren istiyorum. Ama şu işe yaramazsa:

$dateValidator = new Zend_Validate_Date('yyyy-MM-dd hh:ii');

Ben girerseniz 2010-02-01, ben tarih biçimini uymuyor söyleyerek bir hata alıyorum. Ben girerseniz 2010-02-01 3, bu şikayet değil. Ne yapıyor varsayarak olduğunu kullanıcı aracının 2010-02-01 03:00 yerine kullanıcı belirli bir formatta tarih girdiği zorlama dışında.

Nasıl tarih verilen formatta girilmesi gerektiğini zorlayabilir?

2 Cevap

Bakınız: http://framework.zend.com/issues/browse/ZF-6369

Temelde ne aşağı gelir formatı doğrulama yatan kod doğru çalışmıyor olmasıdır. Aksine tam doğrulamasını kullanarak yerine, doğrular bir şey içine verdiği tarih zorlamak için çalışacağız ve böylece mendil sonuçlar almak.

Bug yüzden umarım yakında bir düzeltme göreceksiniz 'Binbaşı' olarak işaretlenmiş gibi görünüyor.

Nuh'un yanıta eklemek için Zend_Validate_Date gerçekten çok korkunç ve esnek değildir; Eğer tarih girişi için bir daha bağışlayıcı bir politika olmasını istiyorsanız olmasıdır.

ZF (çok parseable olsa) çeşitli önemsiz normale olacağı bir Zend_Filter_Date ile sevk Şimdi, eğer, bir normalize biçimine tarihini filtre olabilir gibi farklı bir hikaye olabilir tarih seçicileri / kullanıcı girişi malzemeleri, biçimlendirir o zaman bu biçimde olduğunu doğrulamak. Ama öyle değil.

Olursa olsun olsa, bu soruna aklı başında çözümler bol vardır. Muhtemelen bu en kolay şudur:

$validator = new \Zend_Validate_Callback(function($value) {
    return (bool)strtotime($value);
});

Gerçekten umurumda tüm strtotime ayrıştırmak için yeterince akıllı olsun veya olmasın - Şahsen, bir tarih / datetime yyyy / aa / gg, 23 Eylül 2012, ya da "-2 hafta" gibi geliyor umurumda değil o.