oo php yeni denetleyici

4 Cevap php

Ben pratik bir şüphe var,

Ben OO php kullanıyorum, ve ben ona yeni duyuyorum. Ben açık olmak zend framework kullanıyorum.

Ben tüm belirleyici ve alıcı fonksiyonları vardır, tüm tek mysql tablo ilgili eylemleri ve Patient.php sahip olduğu PatientMapper.php demek de kontrolörler (sınıf) ve eylemler (yöntemleri) yazıyorum.

Ben yeni bir denetleyici yazmak gerektiğini bir şüphe olsun.

  1. I tek bir mysql tablodaki tüm eylemler için bir denetleyici yazmak gerekir.

  2. ya bir modül ile ilgili tüm eylemler için tek bir denetleyici.

4 Cevap

Önceki cevapların aksine, ben senin denetleyicisi DB ilgili gerektiğini söyleyebilirim.

Kontrolörleri modelleri yapmak iş mantığı, kolu yok.

Bunun yanı sıra, her varlıklar için bir denetleyici yazabilirsiniz.

User is an entity, which can be wrapped in a controller, even if it depends on several tables. If your controller is getting bigger and bigger, you can switch to module (Zend Framework terminology) and create an User module, which has an Account controller, etc...

Ben uygulama büyüyecek eğer birkaç bin satır kontrolörleri ile sona erebilir çünkü tek mysql tablo için denetleyici yazmak gerektiğini düşünüyorum.

Kavramsal olarak birbirine ait bir kumanda grubu eylemleri somehow. Kontrolör might sadece (mutlaka bir veritabanı erişen sınıf değil) belirli bir modeli sınıfını kullanmak, ama aynı zamanda çoğu kullanabilirsiniz.

Önemli kontrolör modeli sınıfları mantığını içermemelidir olmasıdır. Bir denetleyici sorumluluğunda kullanıcıların model uygulama ile yapmak için izin belirli bir etkileşim için giriş almak ve temsilci olduğunu. Ve web tabanlı MVC, aynı zamanda, genellikle işlemin sonucuna göre görünüm güncelleştirmek için sorumludur.

Bir MVC anlamak zorundadır en önemli ayrım M V ve C birbirine ait ederken kendi üzerinde yaşamak mümkün olmasıdır. V ve C formu sadece uygulamanıza UI ve onlar yanında bir şey yapmamalıdır. VC sadece bunun üstüne oturur Temelde, M, senin uygulamadır. Should really be M|VC imho

Söyledi ile, uygulama tek bir Controller ile kurtulabiliriz düşünüyorsanız, o zaman bir tek AppController kullanın. Ama kendini kavramsal ayrı bir kontrolör içine sığabilir eylemler ekleyerek bulduğumuzda, o zaman yeni bir denetleyicisi ekleyin. Uygulama basit bir CRUD uygulaması ise, veritabanı tablo başına bir denetleyici var. O başka bir şey yaparsa, o zaman o senaryo uyan bir şey vermek.

@ Gordon - Evet benim uygulama bir CRUD uygulamasıdır. SO i her tablo için bir model oluşturmak gerekir .. Bu en çok kabul gören yolu törenidir. Ve evet ben kontrolörleri abt biraz açık görüyorum ..

i i 3 tablodan gelen verileri gereken bir sayfa var. Yani ben veri ayin almak için tüm 3 model yöntemleri aramak gerekir ...

Ben küçük bir şüphem yok ... ben sınıfın başında başında bu gibi bir kod kullanabilirsiniz. Ve bu diğer geliştirici tarafından yazılmış .... ben bunu kullanıyorum .. ben zor bu bcos, kullanım katıldı bulma am DB kilitleme .. nasıl kullanılacağı ile ilgili herhangi bir yardım buraya katıldı

 protected $_dbTable;

    public function setDbTable($dbTable)
    {
        if (is_string($dbTable)) {
            $dbTable = new $dbTable();
        }
        if (!$dbTable instanceof Zend_Db_Table_Abstract) {
            throw new Exception('Invalid table data gateway provided');
        }
        $this->_dbTable = $dbTable;
        return $this;
    }

    public function getDbTable()
    {
        if (null === $this->_dbTable) {
            $this->setDbTable('Application_Model_DbTable_Appointment');
        }
        return $this->_dbTable;
    }

Bu katılmak kullanmak .. mümkün değil seçme parçasıdır

  $select = $this->getDbTable()->select()
                        ->from("patient_appointment",array('pa_pd_patient_id',
                                'DATE_FORMAT(pa_datetime,"%h:%i %p") as pa_time','pa_datetime','pa_um_id'
                                ,'pa_created_date','pa_mode','pa_type'))
                        ->where('date(pa_datetime) = ?', $date)
                        ->where('pa_pd_patient_id = ?', $patientId)
                        ->order('time(pa_datetime)');
        $resultSet = $this->getDbTable()->fetchAll($select);