【问题标题】:Zend Framework, MVC, Ajax and Cli/CronZend 框架、MVC、Ajax 和 Cli/Cron
【发布时间】:2011-09-20 23:37:49
【问题描述】:
我正在开发基于 Zend 框架的应用程序,并且我正在引导程序中初始化 MVC。现在我在应用程序中添加 AJAX 层,所以在控制器操作中,我禁用了视图渲染,并且我开始质疑我首先在引导程序中启动 MVC 的方法。我还需要在应用程序中添加一些 cron/cli 支持,因此我还需要停止该部分的 MVC 渲染。所以简而言之,有些情况(AJAX、Cli、Cron 等)我们不需要 MVC,但它最初作为引导程序的一部分执行,后来我们强行停止它。
所以我确信必须有另一种方法可以更优雅地处理这种情况,而不是从一开始就启动 MVC,我们可以在将输出发送到客户端之前立即启动它。
【问题讨论】:
标签:
ajax
zend-framework
cron
command-line-interface
zend-framework-mvc
【解决方案1】:
为什么 AJAX 或 CLI 不需要 MVC?这种上下文切换是 MVC 存在的原因:保留模型和/或控制器,但使用另一个视图。
但也许你可以创建另一个引导文件(而不是 index.php),比如 cli.php 和 ajax.php 以避免一些你只是为“常规”请求(导航、路由、布局+视图管理,acl,..)。目前,我不使用其他引导文件,因为 AJAX 非常适合我当前的结构(布局除外,但有一个 contextSwitch 用于此)。
【解决方案2】:
让我们快速浏览一下 index.php 中的应用程序启动:
$application->bootstrap() // here you load and configure your resources
->run(); // here you launch the request handling, dispatching, mvc, etc..
当您想在 CLI 上下文中使用您的应用程序时,您将只想引导,而不是运行 MVC 应用程序。只需省略->run()。
当然,您可以在脚本中只初始化您需要的资源:
$app->bootstrap('cachemanager')->bootstrap('db');
对于 Ajax,如果您需要控制器和操作,则需要所谓的“MVC”。最近有这个SO question,您可以在其中找到有关“Ajax 控制器”概念的更多详细信息。