Zend framework: kullanıcı girişini doğrulamak için doğru yer nedir?

5 Cevap php

Ben '/ index/adduser/id/7' gibi link üzerinden kullanıcılar tablodaki bir kullanıcı eklemek istiyorum.

Question

Ben denetleyici içinde ya da bir yere model dosyası içinde 'adduserAction' işlevi içinde kullanıcı girişi doğrulamak gerekir? Ben 'modeller' dizini içine veritabanı ile ilgili fonksiyonları içeren dosyaları koyduk. Bir kullanıcı 'id' yoluyla bir tabloya eklenir varsayalım. Bu kimliği 'get' yoluyla gönderilir. Ve nihayet onun (model dosyası içinde) 'adduser' fonksiyonu ile tabloya eklenir. Sonra bu 'id' içeride 'adduserAction' veya 'adduser' doğrulamak gerekir.? Ölçeklenebilirlik-bilge, bunun içinde 'adduser' yapmak için daha iyi olurdu?

5 Cevap

Ben model doğrulama koymak söyleyebilirim. Daha sonra merkezi bir konumda doğrulama kurallarını tutabilirsiniz. Nasıl denetleyici geçerli bir kullanıcı adı tam uzunluğunu bilmeli? Bu model bölge. Bir kullanıcı adı uzunluğu doğru veya emin değilse kontrolör modeli sorabilirsiniz, ancak kural kendisi model olması gerekir. Benim denetleyicisi böyle bir şey yapardı:

$model = new Model; $model->loadFromArray(something to get post); if (!$model->isValid()) { forward back to form } $model->save();

Devletler popüler bir iman / paradigma var:

Thin controllers, fat models.

Bu ne demektir, denetleyici tek emin eylemleri modellerinin durumunu değiştirmek ve karşılığında doğru görünümü hizmet yapmak için yürütmem yapıyor sorumlu olmasıdır. Bu düşünceyle, doğrulama modellerin meydana gelmelidir. Ama ... bir dakika boyunca tutun. Modelleri necceseraly 1 katmanlı tabakalar değildir.

. I (projenin ölçeği bunu doğrular varsa) arasındaki NET programcıları aşağıdaki kurulum (veya benzeri) oldukça yaygın bir uygulama olduğuna inanıyorum:

Controller
  -> ServiceLayer
     -> Repository
        -> DataObject

Ve ben de bu kurulum daha fazla gibi başlıyorum. Ayrıca, ben bu kurulum da bir Zend Framework ortamında çok yapılabilir inanıyorum.

Terim Modeli biraz muğlak bir terim olduğunu. Yukarıda size Model katman olarak son üç katmanları düşünebiliriz. Ne üç tabaka temsil aşağıdadır:

  • ServiceLayer:
    Responsible for business logic. In other words: retrieving Dataobjects (Models) from the repository, tying Models together, AND validating Models before storing them, mailing a user, etc..
  • Repository:
    Some type of persistence mechanism (like a Database), that serves DataObjects to the service layer, and stores DataObjects back in the persistence mechanism (after the service layer validated them)
  • DataObject:
    You might consider this the actual Models. Preferably DataObjects have common interfaces (independant of the Repository that is), so that Repositories are interchangeable. In other words, when the repository changes from a database to an XML file from some webservice, the DataObject still has the same interface the service layer and ultimately the view can work with.

Umarım bu mantıklı. Bu temelde şu anda bir daha katmanlı MVC kurulum benim anlayışım budur. Herkes hissederse ben karışık şeyler beni düzeltmek için çekinmeyin var.

Tüm projelerin böyle bir katmanlı kurulum paye olduğunu, ancak unutmayın. Küçük projelerde belki de sadece 1 katmanlı Model katman ile yapabilirdi. Bu durumda, yine de Doğrulama Modelin Sorumluluk olmalıdır. Denetleyicisi (sadece eylemler aracılığıyla bir araya Model devleti ve Görüntüleme bağlama için) ince olmalıdır.

yani sizin zend_form_elements e ekleyerek - - bkz http://framework.zend.com/manual/en/zend.form.elements.html ideal bir çözüm formları içine doğrulama kullanmak için

Ben Kontrolörü, değil Model bunu yapardım. Daha sonra temizlenmiş veriler zaten denetleyicisi kullanmak güvenli olduğu için daha iyi bir yer IMHO. Bu veri aslında kaydedilir önce bile, vb şeyleri karşılaştırmak için iyi bir şey.

Ben zaten cevap biliyorum, ama ben hatırlıyorum bu gibi sitelerde bazı seçim kaynaklar için web tarama ve benim araştırma ve ne ben burada yapmak paylaşmak istiyorum "Beni daha genç". Ben aşağıdakileri yapın:

  • I use forms to do input validation and filtering Do my validation inside models

  • I have a validation method which proxies the form validation method.

  • This validation method can called upon internally by model methods or externally by the controller or view.

Burada hızlı bir örnek:

//UserModel
class Default_Model_User
{

    protected $_form;

    public function getForm()
    {
        if(!isset($this->_form)) {
            $this->_form = new Default_Model_Form_User();
        }
    }

    public function validate($data)
    {
        if($result = $this->getForm()->isValid($data)) {
        // if you have custom validation conditions outside of the form, then you 
        // can do the validation here also.
            if($data['controller_entered'] == 'some value') {
                $result = false;
            }
        }
    return $result;
    }

    public function saveUser($data)
    {
        if($result = $this->validate($data)) {
            // do something.
        }
    return $result;
    }
}

Eğer zaten okumadıysanız, check out emin olun aşağıdaki URL'yi serbestçe kullanılabilir derinleştirilmesi kitap Surviving:

http://www.survivethedeepend.com/zendframeworkbook/en/1.0

This chapter is specific to your dilema: http://www.survivethedeepend.com/zendframeworkbook/en/1.0/implementing.the.domain.model.entries.and.authors#id1491270

Eğer ilerleme gibi hiç şüphesiz diğer sorunları çalıştırmak olacak ... Ben bu konuyu kapak modeli katmanı ilgili benim blog yazısı üzerine yorum atın yardımcı olabilir: http://www.rvdavid.net/my-zend-framework-model-layer-part-service-part-orm/

Bu kimse yardımcı olur umarım.