Mengapa c
huruf kecil dalam controllers
nama folder? Sedangkan Model, Block, dan Helper mulai dengan huruf besar?
controllers
Muthu
sumber
sumber
Jawaban:
Kelas-kelas yang terletak di
controllers
folder adalah jenis kelas khusus.Anda tidak dapat menulis ulang mereka dengan cara yang sama seperti Anda menulis ulang model atau blok menggunakan
<rewrite>
tagconfig.xml
, Anda tidak dapat instantiate mereka menggunakan pabrik seperti yang Anda lakukan untuk model (Mage::getModel()
) atau dengan helpers (Mage::helper
) atau dengan blockers (Mage::app()->getLayout()->createBlock()
).Maksud saya ada
Mage::getControllerInstance()
tapi itu sedikit berbeda. Lebih lanjut tentang ini nanti.Anda mungkin memperhatikan bahwa mereka tidak benar-benar mengikuti aturan penamaan sebagai kelas lainnya.
Karya
controllers
tidak ditemukan dalam nama kelas.Mari kita ambil contoh controller yang ditemukan di
Mage/Catalog/controllers/CategoryController.php
.Nama kelasnya adalah
Mage_Catalog_CategoryController
.Saya tidak bisa memberi Anda jawaban 100% pasti, hanya pengembang inti yang bisa melakukannya.
Tetapi asumsi saya adalah bahwa seseorang tidak ingin pengendali di-autoload.
Lihatlah metode ini
Mage_Core_Controller_Varien_Router_Standard::match
. Ini besar dan menakutkan, tapi itu yang memetakan url ke controller dan tindakan.Ada banyak perhitungan yang dilakukan tetapi di suatu tempat ada baris ini:
Jika kami menggali lebih dalam
_validateControllerClassName
Anda akan berakhirgetControllerFileName
seperti ini:dan dalam
_includeControllerClass
yang pada dasarnya melakukan hal ini:include $controllerFileName;
.Perhatikan hard coded
controllers
dalam metode inigetControllerFileName
dan perhatikan bahwa file controller baru saja dimasukkan. Jadi tidak ada autoloading.Akhirnya, pabrik pengontrol
Mage::getControllerInstance()
tidak menemukan kelas dan tidak melihat dalam penulisan ulang. Itu hanya direturn new $class($request, $response, $invokeArgs);
mana$class
kelas controller.Catatan : Di beberapa modul ada folder bernama
Controller
(dengan huruf besar C) dan kelas-kelas di ikuti penamaan kelas standar. Kelas-kelas itu bukan pengendali. Mereka digunakan sebagai kelas induk untuk pengontrol lain dalam modul atau sebagai router.Catatan sisi 2 : Ini tidak ada di Magento 2. Semua pengontrol berada di
Controller
folder.sumber
Marius kamu hebat sekali: D
Jawaban saya adalah:
Ini adalah standar Zend Framework: http://framework.zend.com/manual/1.12/en/zend.controller.quickstart.html
sumber
controllers
dan saya menganggap tim inti Mage akan menjadi pakar kerangka kerja zend. Pujian. Terima kasih telah berbagi tautan itu