Каков наилучший способ интеграции внешнего скрипта в Zend Framework? Позвольте мне объяснить, потому что я могу спросить об этом неправильно. У меня есть скрипт, который загружает и анализирует XML-файл. Этот скрипт, который работает как ежедневное задание cron, должен выгрузить свои данные в базу данных.
Я использую Zend Framework для сайта, который использует этот скрипт, и мне кажется, что было бы лучше использовать мою подклассическую модель Zend_Db_Abstract
для добавления и обновления базы данных. Как это можно сделать? Мой скрипт входит в библиотеку рядом с компонентами Zend (т.е. library / Mine / Xmlparse.php) и, следовательно, имеет доступ к различным компонентам ZF? Нужно ли просто включать правильные файлы модели и компонент Zend DB в сам файл? Каков наилучший способ справиться с такой интеграцией?
В вашем библиотечном каталоге у вас должна быть собственная библиотека рядом с библиотекой библиотеки Zend. Как бы вы это ни называли (Mylib, Project, …), вы должны включить его в автозагрузчик Zend, и это делается следующим образом:
require_once 'Zend/Loader/Autoloader.php'; $loader = Zend_Loader_Autoloader::getInstance(); $loader->registerNamespace('Project_'); $loader->setFallbackAutoloader(true); if ($configSection == 'development') { $loader->suppressNotFoundWarnings(false); }
Для того, чтобы библиотека была хорошо интегрирована с ZF и автозагрузчиком, вы должны придерживаться соглашений об именах ZF. Это означает две вещи:
Да, вы должны поместить свои собственные классы, которые могут наследовать классы Zend Framework или добавлять дополнительные классы в свою собственную папку рядом с папкой Zend Framework в библиотеке.
Когда включена автоматическая загрузка Zend_Loader, имена классов автоматически сопоставляются с классом, который вы создали, например:
My_Db_Abstract will map to My/Db/Abstract.php .
Я просто наткнулся на то, что может быть связано с этим вопросом. Это статья IBM developerWorks.
Автор рекомендует просто создать папку сценариев в иерархии ZF и использовать ее, как обычно, в ZF (хотя он установил путь ini и вызвал автозагрузку). Это так просто? Просто ли находится в иерархии структуры и включает в себя путь и автозагрузчик, чтобы ваш скрипт имел доступ ко всем позитивам?
Я не на 100% уверен, что вы пытаетесь спросить, но я постараюсь помочь. Если в какой-то момент вы добавите ссылку на «/ path / to / zend / framework» в ваш путь включения php, вы, по сути, включили Zend Framework. Оттуда, если вы это сделаете:
require_once('Zend/Loader.php'); Zend_Loader::registerAutoload();
Тогда в любой точке вашего скрипта вы можете просто создать новые объекты Zend Framework, а Zend_Loader справится с остальными.
Одна из больших вещей о Zend Framework, однако, не заставляет вас делать что-то определенным образом. Вот почему иногда есть несколько способов сделать одно и то же. Итак, если вы чувствуете, что вам нужно, чтобы ваш скрипт использовал Zend Framework только ради этого, это не обязательно. Но если вы считаете, что это может улучшить ваш скрипт, то перейдите к нему.
Обычно я помещаю пользовательские материалы, которые, как я думаю, могут использоваться в проектах в пользовательской папке в библиотеке. Поэтому у меня есть библиотека / Ak33m папка, которая имеет скрипты, которые могут быть вне рамки.
Как сам ZF noob, я думаю, что понимаю некоторые из того, что ОП пытается выяснить. Итак, я просто объясню, что я понимаю в надежде, что это полезно либо OP (или, скорее, будущему читателю, так как исходный вопрос настолько старый, и я полагаю, что OP теперь является ZF гуру).
Я понимаю, что ZF утверждает, что в значительной степени «использует по своему усмотрению», так что вам не нужно покупать всю структуру, такую как Zend_Application, класс Zend_Bootstrap, весь подход MVC и т. Д.
Кроме того, я понимаю соглашения для имен классов и расположения файлов, которые позволяют легко загружать автозагрузку. Пример: class App_Model_User
находится в папке App/Model/User.php
Я думаю, что может быть потенциально запутанным является то, что в контексте сценария, где вы еще не
public/index.php
APPLICATION_PATH
и включите пути в public/index.php
Application
или Bootstrap
привязанный к файлу конфигурации может быть немного неясно, как лучше всего использовать большую часть доброты ZF, которые мы получаем в этом контексте и хотим в другом контексте.
Я предполагаю, что мой ответ на исходный вопрос будет состоять в том, что обычная последовательность точек входа
http request -> .htaccess -> index.php -> config
создает для нас большую часть нашей среды, нам нужно будет дублировать некоторые из них для разных путей входа.
Таким образом, для вашего сценария мой первый инстинкт должен был создать общий файл include, который отражает многое из того, что происходит в index.php, – установите пути include, APPLICATION_PATH, создаст экземпляр и вызовет загрузку, а затем обработает ваш сценарий ,
Еще лучше, может быть, желательно создать единую точку входа для всех ваших скриптов, например, в контексте http / web. Расширьте Zend_Application для собственных сценариев, чтобы $application->run();
больше не запускает обработку MVC-маршрутизатора-диспетчера, а скорее делает ваши собственные вещи. Таким образом, эта точка входа в один сценарий будет выглядеть почти идентично точке входа в сеть, с той лишь разницей, какой экземпляр объекта создается. Затем передайте имя требуемого класса приложения в качестве параметра командной строки сценарию.
Но здесь я признаюсь, что я менее уверен и просто выбрасываю идеи.
Надеюсь, все это помогает кому-то. Это на самом деле помогло мне записать все это. Спасибо и ура!
Обновление 2009-09-29: просто наткнулся на эту статью: использование Zend Framework из командной строки
Обновление 2009-11-20: И еще одна статья: работы Cron в Zend Framework | Дизайн GS
Обновление 2010-02-25: простые сценарии командной строки с Zend Application – David Caunt