Я хотел бы выполнить действие Платформы Зенда для генерации некоторых файлов из командной строки. Действительно ли это возможно и сколько изменения я должен был бы внести в свой существующий веб-проект, который использует ZF?
Спасибо!
На самом деле это намного проще, чем вы думаете. Компоненты начальной загрузки / приложения и ваши существующие конфигурации можно повторно использовать со сценариями CLI, избегая при этом стека MVC и ненужного веса, который вызывается в HTTP-запросе. Это одно из преимуществ отказа от использования wget.
Запустите свой сценарий, как ваш общедоступный index.php:
<?php
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH',
realpath(dirname(__FILE__) . '/../application'));
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV',
(getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV')
: 'production'));
require_once 'Zend/Application.php';
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/config.php'
);
//only load resources we need for script, in this case db and mail
$application->getBootstrap()->bootstrap(array('db', 'mail'));
Затем вы можете перейти к использованию ресурсов ZF так же, как и в приложении MVC:
$db = $application->getBootstrap()->getResource('db');
$row = $db->fetchRow('SELECT * FROM something');
Если вы хотите добавить настраиваемые аргументы в свой сценарий CLI, взгляните на Zend_Console_Getopt
. Если вы обнаружите, что у вас есть общий код, который вы также вызываете в приложениях MVC, обратите внимание на то, чтобы заключить его в объект и вызвать методы этого объекта как из приложений MVC, так и из приложений командной строки. Это хорошая практика.
Вы можете просто использовать PHP, как обычно, из командной строки. Если вы вызываете сценарий из PHP и устанавливаете действие в своем сценарии, вы можете запускать все, что захотите.
Это было бы очень просто. Это не совсем то, как предполагалось, но вот как это могло бы работать, если бы вы захотели.
Например
php script.php
Прочтите здесь: http://php.net/manual/en/features.commandline.php
Вы можете использовать команду wget, если ваша ОС - Linux. Например:
wget http://example.com/controller/action
См. http://linux.about.com/od/commands/l/blcmdl1_wget.htm
ОБНОВЛЕНИЕ:
Вы можете написать простой сценарий bash, подобный этому:
if wget http://example.com/controller/action
echo "Hello World!" > /home/wasdownloaded.txt
else
"crap, wget timed out, let's remove the file."
rm /home/wasdownloaded.txt
fi
Затем вы можете сделать это на PHP:
if (true === file_exists('/home/wasdownloaded.txt') {
// to check that the
}
Надеюсь, это поможет.
Один из вариантов состоит в том, что вы можете обмануть его, выполнив wget для URL, который вы используете для вызова желаемого действия