Bu form doğrulama yapmak için iyi bir tasarım mı?

3 Cevap php

Benim çerçevesi için ben form doğrulama sorunu çözmek için bu kavramı yazdım. Ben bu çerçeve kullanıcı için mümkün olduğunca basit olmasını istiyorum.

Her Formu (= nesne) bir veya birçok FormElements (= nesneler) sahiptir. Her FormElement 0-n FormValidators (= nesne) olabilir. Her şeyi kolayca arkaplanı (basit bir sürükle & bırak şeyler) aracılığıyla yapılandırılır.

Form görünümü işlendiğinde, tüm FormElements üzerinde döngüler, ve bunların her biri için tüm ilişkili FormValidators üzerinde döngüler. Bu şekilde istemci tarafında formunu doğrulamak için tüm gerekli JavaScript kurar.

Bir FormValidator sadece bu yedi şeyi tanımlayan bir hafif nesnedir:

  • Doğrulama programı sınıfın PHP sınıf adı
  • çağrılmalıdır doğrulama programı sınıfının yöntem adı
  • ek argüman (virgülle ayrılmış değerler) için bir dize

  • Doğrulama programı JavaScript "sınıf" adını

  • Çağrılmalıdır "yöntemi" adı
  • bir ek argüman için (virgülle ayrılmış değerler) tring

  • Bir biçimlendirilmiş bir hata mesajı içeren bir ilişkili nesne ErrorInfo

Bu doğrulama yöntemlerinin her veri girişi ile ilk argüman olarak bir giriş değişkeni alır. Bazı kural (lar) maçları ve DOĞRU veya YANLIŞ dönerse bu yöntemlerin her sadece girişini kontrol edin.

When the form is submitted, an FormDataManager is created and receives: - the Form object (so it knows from where the data came from) - the input data (typically $_POST)

Daha sonra sadece tüm FormElements üzerinde dolaşır, tüm FormValidators denetler, ve bir şey geçersiz ise, bu hata iletileri dizi geçirilen Formu yeniden yükler. Her şey ince ise, veri daha fazla (yani db saklanan) işlenir.

Bu tasarımda iyileştirmeler var mı? Ben kaçırdım şey?

3 Cevap

Ben cevapsız düşünüyorum ortak bir kavramdır doğrulama doğrulama gruplar. Örneğin, aşağıdaki senaryolardan biri için hitap etmek isteyebilirsiniz:

  • Alan bir herhangi bir değer olup olmadığını yalnızca Form alan B zorunludur.
  • Alan bir belirli bir değere sahip yalnızca Form alan B zorunludur.
  • Alan A (sayısal veya tarih) belirli bir aralıkta yalnızca Form alan B zorunludur.
  • Ya alan A VEYA alan B (her ikisi de boş olamaz) bir değeri olması gerekir.
  • (XOR) - Ya alan A VEYA B alan bir değer (her ikisi de bir değer boş veya her ikisi de olamaz) olması gerekir.
  • Şifre ve onaylayın şifre alanların eşit olması gerekir.

And I'm sure there are other scenarios where validation depends on the validity or optional aspect of other form elements. Also - 'mandatory' in the scenarios above may also be simply 'applicable', which would be a different situation again. Typical (medical system) example here is: "Are you male/female?", with a follow-up of "Are you pregnant?" for females. Or AOP related questions, where you have the birthday and have a certain follow-up question only IF they are 65 years or older.

Size yararlı ve genel bir şekilde bu bağımlılıkları içeren bazı ValidationGroup veya doğrulama dernek nesne ihtiyacınız var demektir.

Ben tasarım o da doğrudan bir FormElement ama FormElements bir arada bağlantılı ve doğrulama tetikleyen önce şartlı onay dahil değildir FormValidator nesneleri olabileceği anlamına gelir sanırım.

Kulağa ilginç geliyor. Ben istemci tarafı ve sunucu tarafı hem doğrulayarak gibi geliyor, özellikle çünkü, doğru yolda olduğunu düşünüyorum.

Eğer (sorunuzu okurken ve ben bu kaçırmış olabilir) yapmanız gereken tek şey, doğrulama aynı zamanda sunucuda olur emin olun. Bu şekilde form bilgisi hala birileri kapatır veya javascript ile tinkers bile doğrulanır.