Разница между / контроллером и / контроллерами

43

Вопрос, который я хотел задать целую вечность, более теоретический, чем все остальное.

Я полностью разбираюсь в разработке расширений, используя обычную файловую структуру модуля Magento. Я заметил, что, глядя на некоторые «расширения» Mage, некоторые из них содержат каталог / Controller. Какова цель этих контроллеров и чем они отличаются от тех, которые обычно используются в директории / controllers dir?

Я вижу, что имена структурированы по-разному, поэтому я собираю, что они автоматически загружаются по-другому, но для чего служат классы / Controller?

Спасибо всем

thebluefox
источник

Ответы:

45

Разница в автозагрузке, как вы уже упоминали. В общем случае файлы в / Controller являются абстрактными (или родительскими) классами, от которых наследуются классы в / controllers .

Magento не создан для того, чтобы знать каталог / Controller - это скорее вопрос соглашения. Имена классов подсказывают, где найти этих родителей на диске, и автозагрузчик находит их. Вы увидите это в Mage_Sales:

class Mage_Sales_OrderController extends Mage_Sales_Controller_Abstract

Здесь, модуль продаж находит контроллеры внутри, app/code/core/Mage/Sales/controllersи загруженный контроллер говорит автозагрузчику, чтобы найти его родителя app/code/core/Mage/Sales/Controller.

Это делается для обеспечения разделения интересов и предоставления возможности классам конкретных контроллеров наследовать общие функциональные возможности.

philwinkle
источник
Это имеет полный смысл, и, как вы уже объяснили, на самом деле кажется довольно очевидным! Спасибо, Фил!
thebluefox