Neden c
küçük harf controllers
klasör adında? Model, Block ve Helper büyük harfle mi başlıyor?
Neden c
küçük harf controllers
klasör adında? Model, Block ve Helper büyük harfle mi başlıyor?
Yanıtlar:
controllers
Klasörlerde bulunan sınıflar özel bir sınıf cinsidir.
Onları, <rewrite>
etiketi kullanarak bir modeli veya bir bloğu yeniden yazdığınız gibi yeniden config.xml
yazamazsınız, modeller ( Mage::getModel()
) veya yardımcıları ( Mage::helper
) veya blokları ( Mage::app()->getLayout()->createBlock()
) ile yaptığınız gibi bir fabrika kullanarak bunları başlatamazsınız .
Yani var Mage::getControllerInstance()
ama bu biraz farklı. Bunun üzerine daha sonra.
Diğer sınıflar olarak adlandırma kuralına uymadıklarını fark edebilirsiniz.
İş controllers
, sınıf adında bulunamadı.
Örneğin bulunan denetleyiciyi ele alalım Mage/Catalog/controllers/CategoryController.php
.
Sınıfın adı Mage_Catalog_CategoryController
.
Sana% 100 kesin bir cevap veremem, sadece bir çekirdek bunu yapabilir.
Ancak benim varsayım, birisinin denetleyicilerin otomatik yüklenmesini istemediği yönünde.
Bu yönteme bir göz atın Mage_Core_Controller_Varien_Router_Standard::match
. Büyük ve korkutucu, ancak bir denetleyiciye bir URL adresi ve bir eylem gösteren budur.
Çok fazla hesaplama yapıldı ama bir yerlerde bu satır var:
$controllerClassName = $this->_validateControllerClassName($realModule, $controller);
Daha derine inersek _validateControllerClassName
, sonunda getControllerFileName
şöyle görüneceksin:
public function getControllerFileName($realModule, $controller)
{
$parts = explode('_', $realModule);
$realModule = implode('_', array_splice($parts, 0, 2));
$file = Mage::getModuleDir('controllers', $realModule);
if (count($parts)) {
$file .= DS . implode(DS, $parts);
}
$file .= DS.uc_words($controller, DS).'Controller.php';
return $file;
}
ve _includeControllerClass
o temelde yapar: include $controllerFileName;
.
controllers
Yönteme kodlanmış olan kodu getControllerFileName
ve denetleyici dosyasının yeni eklendiğine dikkat edin. Yani otomatik yükleme yok.
Son olarak, denetleyici fabrikası Mage::getControllerInstance()
sınıfı bulamaz ve yeniden yazılanlara bakmaz. Sadece kontrolör sınıfının return new $class($request, $response, $invokeArgs);
nerede $class
olduğunu yapar .
Not : Bazı modüllerde Controller
(büyük harf C ile) adlı bir klasör vardır ve standart sınıf isimlerini takip eden sınıflar vardır. Bu sınıflar gerçekten denetleyici değildir. Modüldeki diğer kontrolörler için ebeveyn sınıfları veya yönlendiriciler olarak kullanılırlar.
Yan not 2 : Bu Magento 2'de mevcut değildir. Tüm kontrolörler Controller
klasörde bulunur.
Marius çok harikasın: D
Cevabım sadece olurdu:
Bu Zend Framework standardıdır: http://framework.zend.com/manual/1.12/en/zend.controller.quickstart.html
controllers
ve Mage çekirdek ekibinin bir zend framework uzmanı olacağını varsayarım. Kudos. Bu bağlantıyı paylaştığınız için teşekkür ederiz