#magento #controller
#magento #контроллер
Вопрос:
Я видел несколько базовых примеров контроллеров, где в их методе indexAction () они выполняют что-то вроде echo ‘Это действие индекса’. Но в реальных приложениях этот метод вернул бы длинную строку html, начинающуюся с <html>?
Спасибо.
Ответ №1:
В действительности большинство контроллеров используют XML-макеты для генерации серии логических блоков, которые должны отображаться на странице, а затем рекурсивно отображают эти блоки для построения страницы. Обратите внимание, что на самом деле они не возвращают эту строку, а классы компоновки отвечают за получение выходных данных в нужном месте. Это код, который вы обычно видите для этого случая:
$this->loadLayout();
$this->renderLayout();
Использование echo — это быстрое сокращение, которое позволяет разработчику временно игнорировать всю систему компоновки и просто сосредоточиться на запуске правильного действия.
Надеюсь, это немного прояснит ситуацию!
Спасибо, Джо
Ответ №2:
Примеры, которые вы видели, предназначены только для того, чтобы показать вам, что код в контроллере выполняется. Что вы должны делать в контроллере Magento, так это
-
Манипулирование моделями на основе значений из запроса (get, post и т.д.)
-
Скажите Magento, чтобы он загрузил и отрисовал макет, который будет составлять ответ
Система компоновки / блоков считывает данные непосредственно из классов модели системы, поэтому нет необходимости делать что-либо, связанное с выводом в контроллере (это не на 100% верно, но если вы знаете причины, по которым это не на 100% верно, вам не нужно было читать так далеко в ответе)
Если вы посмотрите на контроллеры ядра Magento, большинство из них заканчивается
$this->loadLayout();
$this->renderLayout();
Это строки, с которых начинается вывод. Не echo
требуется.
Комментарии:
1. спасибо за ваш ответ, полезный, как всегда. Я считаю, что это вопрос предпочтений программиста, следует ли выполнять манипуляции с моделью в контроллере или блоке. Нет сомнений, что управление доступом и выполнение бизнес-логики принадлежат контроллеру (ИМХО), но такие вещи, как загрузка, разбиение на страницы, сортировка, фильтрация данных модели, обычно выполняются в блоке. Однако это серая линия. Можете ли вы расширить свой ответ, чтобы обратиться к этой серой строке?
2. Спасибо. Есть ли шанс, что вы могли бы объяснить, какой макет загружает вызов loadLayout? Там так много информации, но нет ни одного хорошего ресурса. Может ли пользовательский модуль иметь только один макет или у него может быть несколько? Где он / они должны быть определены? В config.xml Я думаю, но в разделе adminhtml или разделе интерфейса? И где находятся файлы макета в файловой системе? Я искал приличную статью, кратко объясняющую это, но безуспешно.
3. @user Я потратил последние 3 года на то, чтобы объяснить это. Начните с Magento для разработчиков MVC. alanstorm.com/category/magento Тогда купите эту книгу store.pulsestorm.net/products/no-frills-magento-layout
4. @Jonathan Magento Inc. сам обрабатывает серую линию по-разному в разных областях системы, поэтому я не уверен, что там есть что канонично сказать. Разработайте свои собственные внутренние рекомендации, следуйте им и пересматривайте по мере того, как вы обнаружите, что работает для вас и вашей команды.