gpt4 book ai didi

php - 从命令行运行 Zend Framework 操作

转载 作者:IT老高 更新时间:2023-10-28 12:02:32 24 4
gpt4 key购买 nike

我想从命令行运行 Zend Framework 操作来生成一些文件。这可能吗?我需要对使用 ZF 的现有 Web 项目进行多少更改?

谢谢!

最佳答案

更新

您可以从 https://github.com/akond/zf-cli 获得所有适用于 ZF 1.12 的代码如果你喜欢。

虽然解决方案 #1 没问题,但有时您需要更精细的解决方案。特别是如果您希望拥有不止一个 CLI 脚本。如果您允许,我会提出另一种解决方案。

首先,在你的 Bootstrap.php 中有

protected function _initRouter ()
{
if (PHP_SAPI == 'cli')
{
$this->bootstrap ('frontcontroller');
$front = $this->getResource('frontcontroller');
$front->setRouter (new Application_Router_Cli ());
$front->setRequest (new Zend_Controller_Request_Simple ());
}
}

此方法将剥夺默认路由器的调度控制权,转而使用我们自己的路由器 Application_Router_Cli。

顺便说一句,如果您在 _initRoutes 中为您的 Web 界面定义了自己的路由,您可能希望在命令行模式下中和它们。

protected function _initRoutes ()
{
$router = Zend_Controller_Front::getInstance ()->getRouter ();
if ($router instanceof Zend_Controller_Router_Rewrite)
{
// put your web-interface routes here, so they do not interfere
}
}

类 Application_Router_Cli(我假设你已经为应用程序前缀打开了自动加载)可能看起来像:

class Application_Router_Cli extends Zend_Controller_Router_Abstract
{
public function route (Zend_Controller_Request_Abstract $dispatcher)
{
$getopt = new Zend_Console_Getopt (array ());
$arguments = $getopt->getRemainingArgs ();
if ($arguments)
{
$command = array_shift ($arguments);
if (! preg_match ('~\W~', $command))
{
$dispatcher->setControllerName ($command);
$dispatcher->setActionName ('cli');
unset ($_SERVER ['argv'] [1]);

return $dispatcher;
}

echo "Invalid command.\n", exit;

}

echo "No command given.\n", exit;
}


public function assemble ($userParams, $name = null, $reset = false, $encode = true)
{
echo "Not implemented\n", exit;
}
}

现在您可以简单地通过执行来运行您的应用程序

php index.php backup

在这种情况下,BackupController Controller 中的 cliAction 方法将被调用。

class BackupController extends Zend_Controller_Action
{
function cliAction ()
{
print "I'm here.\n";
}
}

您甚至可以继续修改 Application_Router_Cli 类,以便不是每次都执行“cli”操作,而是用户通过附加参数选择的操作。

最后一件事。为命令行界面定义自定义错误处理程序,这样您就不会在屏幕上看到任何 html 代码

在 Bootstrap.php 中

protected function _initError ()
{
$error = $frontcontroller->getPlugin ('Zend_Controller_Plugin_ErrorHandler');
$error->setErrorHandlerController ('index');

if (PHP_SAPI == 'cli')
{
$error->setErrorHandlerController ('error');
$error->setErrorHandlerAction ('cli');
}
}

在 ErrorController.php 中

function cliAction ()
{
$this->_helper->viewRenderer->setNoRender (true);

foreach ($this->_getParam ('error_handler') as $error)
{
if ($error instanceof Exception)
{
print $error->getMessage () . "\n";
}
}
}

关于php - 从命令行运行 Zend Framework 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2325338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com