Różnica między / Controller i / controllers

43

Pytanie, które chciałem zadać od wieków, bardziej teoretyczne niż cokolwiek innego.

Jestem w pełni zorientowany w tworzeniu rozszerzeń przy użyciu normalnej struktury plików modułu Magento. Zauważyłem jednak, patrząc na niektóre „rozszerzenia” Maga, że ​​niektóre zawierają katalog / Controller. Jaki jest cel tych kontrolerów i czym różnią się od normalnie używanych w katalogu / kontrolerów?

Widzę, że nazwy mają inną strukturę, więc zbieram, że są ładowane automatycznie w inny sposób, ale do czego służą klasy / Kontroler?

Dziękuje wszystkim

thebluefox
źródło

Odpowiedzi:

45

Różnica polega na automatycznym ładowaniu, jak już wspomniałeś. Ogólnie pliki w / Controller są klasami abstrakcyjnymi (lub nadrzędnymi), z których dziedziczą klasy w / kontrolerach .

Magento nie jest zbudowany, aby być świadomym katalogu / Controller - to raczej kwestia konwencji. Nazwy klas podpowiadają, gdzie znaleźć tych rodziców na dysku, a autoloader je zlokalizuje. Zobaczysz to w Mage_Sales:

class Mage_Sales_OrderController extends Mage_Sales_Controller_Abstract

Tutaj moduł sprzedaży lokalizuje kontrolery wewnątrz, app/code/core/Mage/Sales/controllersa załadowany kontroler mówi autoloaderowi, aby zlokalizował swój element nadrzędny app/code/core/Mage/Sales/Controller.

Odbywa się to w celu rozdzielenia problemów i umożliwienia określonym klasom kontrolerów dziedziczenia wspólnej funkcjonalności.

philwinkle
źródło
Ma to całkowity sens, a teraz, gdy to wyjaśniłeś, wydaje się całkiem oczywiste! Dzięki Phil!
thebluefox