Загрузка Mage.php изнутри Symfony2
Как лучше всего загрузить Mage.php (Magento) класс в Symfony2. Я читал документацию и пробовал разные конфигурации autoloader
и classloader
, но единственное, что работает для меня, приведено ниже.. В идеале я хотел бы использовать "Лучшие практики", которых не делает мое нынешнее решение. Это, вероятно, потребует отказа от использования require_once
и вместо этого загрузки из autoload.php
или использования composer.json
/*
* var/www/symfony/app/console -- THIS WORKS ONLY IN THE SYMFONY CONSOLE
*/
if($env == 'prod'){
require_once '/var/www/production/app/Mage.php';
}else{
require_once '/var/www/development/app/Mage.php';
}
Этот код позволяет мне выполнять задачи Magento ($product->save()
, вещи типа backoffice, пакетные обновление продуктов) из среды Symfony, не нарушая основные функциональные возможности Magento и не подвергая данные риску.
Для тех, кому интересно, почему я хотел бы это сделать
Платформа Symfony проще для быстрой разработки внутренних процессов и внутренней отчетности. Функция Twig и формы Symfony хорошо подходят для создания отчетов.
2 answers
На самом деле это не ответ на ваш вопрос, но, по моему честному мнению, смешивание 2 фреймворков (или как вы хотите назвать Magento) никогда не является хорошим решением.
Используйте API Magento для выполнения задач, связанных с Magento, вызывая их из вашего приложения Symfony. Таким образом, они могут работать отдельно и не будут мешать друг другу.
Поскольку Magento очень особенный, пока нет такой вещи, как лучшая практика, но есть несколько возможных способов.
То, что вы описали, - это единственный способ, кроме того, он должен уважать еще некоторые вещи. 1. загрузите свой фреймворк (означает файл автоматической загрузки композиторов) 2. требовать magentos Mage.php 3. вызовите приложение Mage::($mageruncode, $mageruntype) с параметрами, которые вы бы использовали в index.php
Вам необходимо хорошо протестировать свой код, так как каждый класс, который пытались загрузить, может привести к сбою вашего приложения, так как magento создает исключение для не найденных классов. Это также влияет на функцию class_exists().
Тогда есть второй способ - использовать автозагрузчик композиторов для magento. в основном это означает:
"автоматическая загрузка":{ "карта классов": [ "../путь/к/magento/приложение/код", "../путь/к/magento/библиотека" ] },
Но удалить собственный загрузчик magento может быть немного сложно.
Для меня я использую первый подход в проекте silex, и он очень стабилен. Но тебе нужно следить за всем, что использует class_exists.