Neden cküçük harf controllersklasör adında? Model, Block ve Helper büyük harfle mi başlıyor?
Neden cküçük harf controllersklasör adında? Model, Block ve Helper büyük harfle mi başlıyor?
Yanıtlar:
controllersKlasö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.xmlyazamazsı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 _includeControllerClasso temelde yapar: include $controllerFileName;.
controllersYönteme kodlanmış olan kodu getControllerFileNameve 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 $classolduğ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 Controllerklasö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
controllersve 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