Должны ли контроллеры Magento быть объявлены FINAL? - PullRequest
2 голосов
/ 08 марта 2011

В настоящей путанице в Magento есть два набора классов контроллеров; Те, что в каталоге Controller, и те, что в каталоге controllers. Первые имеют имена типа Mage_Adminhtml_Controller_Action, а вторые - Mage_Adminhtml_IndexController. Последние обычно являются потомками первых.

Поскольку последние не сопоставляют свои имена с их местоположением в Соглашение об именах PEAR они не загружаются обычным автозагрузчиком, вы не можете include их из своих сценариев, поскольку вы не можете определите, в каком пуле кода они находятся, и это может нарушить функцию компиляции.

Я чувствую, потому что их так сложно расширить, что они должны быть официально final и покончить с этим. Это сломает что-нибудь, о чем я не думаю? Это плохая практика как-то? Кто-нибудь может предложить лучшие термины для описания расширяемых классов и чертовски трудно расширяемых классов?

Ответы [ 2 ]

4 голосов
/ 09 марта 2011

люди должны использовать методы magento для получения пути к классу контроллера, и тогда компилятор не сломается, поскольку методы вернут правильный путь.

require_once  Mage::getModuleDir('controllers', 'Mage_Checkout').DS.'OnepageController.php';
3 голосов
/ 08 марта 2011

Это было бы ужасно.

Если вы вернулись назад во времени возможно , вы могли бы обосновать объявление этих контроллеров окончательным, чтобы избежать проблем, о которых вы говорите, но внесение таких изменений значительно увеличило бы сломайте большое количество установок Magento в дикой природе.Существует множество случаев, когда расширение базовых контроллеров для новых функций магазина (или даже переопределения / перезаписи) является правильным шагом.Теперь сделать их окончательными означает, что вы не только разбиваете приложения, но и разбиваете их так, что их невозможно восстановить.

Даже если вы вернулись в прошлое, я не уверен, что ваши разочарования (хотя и понятные) выдержатв качестве причины

Нет автозагрузки

Это больше похоже на исправление и / или добавление дополнительного автозагрузчика

Невозможно включить их в ваши скрипты, так как вы не можете быть уверены, чтопул кодов они в

Я не уверен, что следую за проблемой здесь.Включение базового контроллера так же просто, как

require_once('Mage/Catalog/controllers/CategoryController.php');

Нет, вы не уверены, в каком пуле кодов они находятся ... и это нормально.Смысл пулов кода в том, что у них есть резервные пути включения PHP, которые позволяют пользователям использовать собственную версию определенного класса, если это необходимо, без разрушения ядра.

Потенциально нарушает функцию компиляции

Я не знаком с описываемой здесь проблемой, но опять-таки, это больше похоже на случай расширения / исправления функциональности компилятора

Создание классов контроллера как final для решения этих проблем было бы похоже на использование базуки для решения проблемы с домашними мышами.Причина, по которой у нас есть классы контроллеров, заключается в том, что другие URL-адреса нашего приложения могут наследовать функциональность.Даже если вы не верите в это для проектов, в которых вы являетесь архитектором, отнять это после предоставления - это, в лучшем случае, плохой шаг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...