В моем приложении с несколькими модулями у меня есть метод, который отправляет электронное письмо, а текст использует помощник просмотра URL для создания ссылки. Если я выполнить этот метод с помощью браузера все работает правильно, но если я запускаю этот метод через хрон с помощью оболочки я получаю эту ошибку:Zend_Controller_Router_Exception: Маршрут по умолчанию не определен
Fatal error: Uncaught exception 'Zend_Controller_Router_Exception' with message 'Route default is not defined' in /path/ZendFramework-1.12.1/library/Zend/Controller/Router/Rewrite.php on line 318
Zend_Controller_Router_Exception: Route default is not defined in /path/ZendFramework-1.12.1/library/Zend/Controller/Router/Rewrite.php on line 318
Сидя в Интернете, я нашел это решение: http://www.dragonbe.com/2012/11/route-default-is-not-defined.html
Если я то, что я сказал в ошибке блога, больше не происходит, но в этот момент сгенерированная ссылка и «отсутствие протокола и имени хоста» записывает мне ссылку только на контроллер и действие, например «/ controller/action/foo/bar»,
Не могли бы вы мне помочь?
благодаря
Редактировать
Это, как я запускаю хрон рабочих мест:
структура:
app/
app/application
.. stuff ...
app/scripts/
app/scripts//bootstrap.php
app/scripts//cronjobs.php
приложение/скрипты // bootstrap.php
<?php
// Define path to application directory
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application/'));
// Ensure library/ is on include_path
set_include_path(
implode(PATH_SEPARATOR,
array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path())));
if (isset($zendOptions)) {
// using Zend_Console_Getopt to parse environment to load
require_once 'Zend/Console/Getopt.php';
try {
$getOpt = new Zend_Console_Getopt($zendOptions);
$getOpt->parse();
} catch (Zend_Console_Getopt_Exception $e) {
echo $e->getMessage() . PHP_EOL;
echo $e->getUsageMessage();
exit(1);
}
if ($getOpt->getOption('h')) {
echo $getOpt->getUsageMessage();
exit(0);
}
// Define application environment
define('APPLICATION_ENV',
$getOpt->getOption('e') ? $getOpt->getOption('e') : 'production');
} else {
// Define application environment using getenv
define('APPLICATION_ENV',
getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production');
}
// define APPLICATION_BOOTSTRAP if not defined
if (!defined('APPLICATION_BOOTSTRAP')) {
define('APPLICATION_BOOTSTRAP', true);
}
// Define standard config file
define('APPLICATION_CONFIG', APPLICATION_PATH . '/configs/application.ini');
/** Zend_Application */
require_once 'Zend/Application.php';
// Init a Zend_Application
$zendApplication = new Zend_Application(APPLICATION_ENV, APPLICATION_CONFIG);
if (APPLICATION_BOOTSTRAP) {
$zendApplication->bootstrap();
}
приложение/скрипты/cronjobs.php
<?php
// define options for script
$zendOptions = array(
'environment|e=w' => 'Environment to use as specified in application.ini (default production)',
'test|t' => 'test cron',
'help|h' => 'Show program usage');
// bootstrap application object (default true, put to false
// if you need to bootstrap only single resources
define('APPLICATION_BOOTSTRAP', true);
// parse the options and bootstrap application if required
require_once realpath(dirname(__FILE__) . '/bootstrap.php');
/* start your script here, you'll have the following vars: */
/* @var $zendApplication Zend_Application initialized Zend_Application object */
/* @var $getOpt Zend_Console_Getopt a getopt parsed object */
error_reporting(E_ALL);
if ($getOpt->getOption('t')) {
$vhUrl = new Zend_View_Helper_Url();
$url = $vhUrl->url(array('controller' => 'foo', 'action' => 'bar'));
Zend_Debug::dump($url);
}
отладочная печать '/ Foo/бар'
это может помочь некоторым также http://stackoverflow.com/questions/2325338/running-a-zend-framework-action-from-command-line – RockyFord
для запуска моего cron, используйте Zend_Console_Getopt, я знаю, как он работает , Я не понимаю, почему в сгенерированной ссылке отсутствует имя хоста? – JellyBelly
Можете ли вы изменить свой вопрос, чтобы включить больше информации о вашем скрипте cron - запускает ли он загрузку приложения? И можете ли вы показать, как вы называете помощника URL? –