Nasıl Form İşleme PHP basitleştirmek mı?

2 Cevap php

Ben artık oldukça uzun bir süre için bir PHP geliştiricisi olmuştur ediyorum ama bugüne kadar ben (aka, normalleştirmek sterilize, doğrulamak, doldurmak ve ekran formları ve onun ilgili alan hataları) işlemek için basit bir yol buldum değil.

Ben PHP çerçevelerin çoğu günümüzde bu işi kolaylaştırmak olduğunu biliyorum ama nedense ben bu çerçevelerin biri benim tüm kodu taşıma gibi hissetmiyorum, ve ben oldukça (form doğrulama örneği için Django nasıl uygulanır anlayamıyorum ben Biliyorum, bu Python ama ben gerçekten onların yaklaşımı gibi), bu yüzden en iyi yolu bana burada ben basit bir formu işlemek şekilde göndermek ve istiyorum ben ama belki siz iyi yönde beni işaret edebilir.

<?php

// sample controller
class _sample extends framework
{
    // sample action
    function contact()
    {
    	if ($this->Is->Post() === true)
    	{
    		$errors = array();

    		if ($this->Is->Set($_POST['name']) === false)
    		{
    			$errors['name'] = 'Please fill in your name.';
    		}

    		if (($this->Is->Email($_POST['email']) === false) || ($this->Is->Set($_POST['email']) === false))
    		{
    			$errors['email'] = 'Please fill in your email address.';
    		}

    		if (($this->Is->Phone($_POST['contact']) === false) && ($this->Is->Mobile($_POST['contact']) === false))
    		{
    			$errors['contact'] = 'Please fill in your phone (or cell phone) number.';
    		}

    		if ($this->Is->Set($_POST['message']) === false)
    		{
    			$errors['message'] = 'Please type a message';
    		}

    		// no errors, it's valid!
    		if (empty($errors) === true)
    		{
    			// do stuff and redirect to "success" / "thank you" page
    		}

    		// load the form view, and let it display the errors
    		// automatically prefill fields with $_POST values
    		else
    		{
    			$this->View('contact_form', $errors);
    		}
    	}

    	// load the form view for the first time
    	else
    	{
    		$this->View('contact_form');
    	}
    }
}

?>

Gördüğünüz gibi, bu ancak bunu doğrulamak için beni dışarı yaşam sürer, basit bir iletişim formu olması gerekiyordu, ben bazı tasarım desenleri (Observer, Fabrika) bakarak olmuştur ama emin hissediyorum yoksa ve ne şekilde Ben bunları uygulamak gerekir.

2 Cevap

Tüm formları, fieldtypes için sınıflar ve sadece çeşitli değerlerini doğrulamak için statik bir sınıf için bir soyut temel sınıf yapabilirdiniz (validateString, validateHtml, validateEmail, validateNumber, tarih, vb, sadece yöntemleri ..). Formunuzu tanımlama, siz nesneleri kullanmak istiyorsunuz ne alan tanımlamak, böylece Formu-> validate () yöntemi, Alan-> validate () çağırmak istiyorum ve filtre edilmiş değeri ya da hata mesajı döndürür. Alanları için varsayılan hata iletileri belirtin, ancak form sınıfında alanlarını tanımlarken onu geçersiz kılmak için bir seçenek sunar.

Oh, ve $ _POST şeyi bırakın. , Bir kez yazı okuyun form doğrulama için bir kez geçmek ve daha sonra süzülür alan değerleri üzerinde çalışacak.

Başka bir şey sizin ihtiyaçlarınıza ve uygulamaların mimarisine bağlı olarak form doğrulama elde etmek için çeşitli yolları vardır, bu sizin uygulama tasarımı için çeşitli yaklaşımlar olduğunda amaçlı bir formu doğrulayıcı yapmak zor olabilir. Işinizi yapmanın bir yolu seçin ve (o çerçeve veya kendi kod gitmek için hazır olup olmadığını ne olursa olsun) ona sopa, ya da yazmak ne olursa olsun süpersiniz-form doğrulama, bu ikincisi projelerde hiçbir mantıklı olacaktır.

Bir daha: Django gibi? İyi! Yani Django Python programlama başlamak, gerçekten işinizi halletmek için nasıl düşünme biçimini değiştirmek gerekir.

IMHO, tek bir kavram olarak bir form tedavi girişimi bir başarısızlıktır. Eğer uygulama katmanlı mimarisi her türlü varsa, formlar bu kesen olasıdır. Formlar uygulama mantığı (kontrolör layer) var, onlar bir görsel temsilini (görünüm tabaka) var, onlar devlet (uygulama katmanı modeli), ve sonunda genellikle işlem komut bir tür (model katman) çağırmak.

Ben sadece (veya olmayabilir) olur diye, bir varlık olarak bir "form" fikrini bırakarak ve yerine üç bölümden odaklanmak (giriş işleme, katman oluşturma ve model) gibi tamamen ayrı konular çok daha iyi olduğunu düşünüyorum birbirleriyle yakından ilişkili. Terim kadar güçlü bir çok şey anlamına gelebilir artık yüklenir ancak bu, MVC deseni olarak adlandırılan bazı katıdır.