Подходящий/лучший способ выполнения некоторого PHP, не связанного с базой данных, при первой установке модуля?

Я создаю модуль, который требует выполнения нескольких действий (только один раз) при установке модуля. Может быть ряд вещей, которые нужно сделать, но самое основное, что мне нужно сделать, это сделать API-вызов на сервер, чтобы сообщить внешнему серверу, что модуль был установлен, и получить несколько обновленных конфигураций. Предметы.

Я прочитал этот этот вопрос в stackoverflow, однако в моей ситуации меня действительно интересует выполнение кода, который не имеет ничего общего с базой данных, фикстурами, обновлением таблиц и т. д. Кроме того, просто для ясности, этот модуль не влияет (влияет?) на внешний интерфейс. К вашему сведению, я также прочитал эта впечатляющая статья Алана Сторма, но на самом деле это только доводит до моего сознания, что сценарии установки/обновления не предназначены для выполнения случайного PHP.

На мой взгляд, у меня есть несколько возможных способов сделать это:

  • Я делаю то, что, как я боюсь, не является лучшей практикой, и добавляю немного PHP в мой скрипт установки/установки, чтобы выполнить этот php.
  • Я создаю какой-то cronjob, который будет выполнять нужную мне задачу только один раз (не уверен, как это будет работать, но кажется, что это может быть «творческое» решение — конечно, если cron не настроен должным образом, это не удастся, что не хорошо
  • Я создаю флаг core_config_data («mynamespace/mymodule/initialized»), который устанавливаю после запуска моего скрипта, и проверяю каждую область adminhtml, к которой прикасается мой модуль (CMS/Pages и мой собственный контроллер adminhtml). Это похоже на хорошее решение, за исключением всех дополнительных накладных расходов каждый раз, когда происходит попадание в CMS/Pages или мой контроллер, проверяя этот параметр core_config_data. ХОРОШАЯ вещь в этом решении заключается в том, что если что-то потерпит неудачу с моим вызовом API, я могу установить этот флаг в false, и он снова запустится, отобразит соответствующее сообщение и продолжит работу до тех пор, пока не добьется успеха (или не будет иметь дополнительную логику, которая остановит код инициализации после XX попыток)

Являются ли какие-либо из этих вариантов «лучшими» способами, и есть ли где-нибудь прецедент для этого, например, уважаемое расширение или сами Magento?

Спасибо заранее за ваше время!


person Kevin Mitchell    schedule 07.03.2012    source источник


Ответы (1)


Вы поднимаете интересный вопрос.

На данный момент я не знаю, как можно выполнить любой произвольный PHP при установке модуля, очевидным методом (правильно/неправильно) будет использование сценария установки/обновления установщика в соответствии с 1 из вашего Q.

2 и 3 кажутся более ресурсоемкими, т.е. без необходимости проверять каждую загрузку страницы (кэш или нет).

Существует также подход с использованием ./pear для установки вашего модуля (при условии, что вы упаковали его с помощью Magento). Я очень быстро просмотрел ./downloader/pearlib/php/pearmage.php, но не увидел ни одной строки, которая выполняется (по сравнению с копированием файлов). Я бы предположил, что это лучшее место для выполнения чего-либо при установке (кроме 1, упомянутого выше).

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

person Ben Lessani - Sonassi    schedule 13.03.2012
comment
Спасибо, что нашли время ответить @sonassi - очень ценю это! Честно говоря, я никогда не думал о том, чтобы посмотреть на файлы magento connect, связанные с грушей, чтобы найти решение, и, честно говоря, я мало знаю о том, как Magento Connection на самом деле работает в фоновом режиме (у меня никогда не было особых причин, и я всегда предполагал, что это прямой процесс), но это дает мне еще кое-что, на что стоит обратить внимание. Если у вас есть другие идеи/мысли по этому поводу, я, безусловно, хотел бы их услышать! - person Kevin Mitchell; 14.03.2012