代码之家  ›  专栏  ›  技术社区  ›  rg88

将外部脚本与Zend框架集成

  •  4
  • rg88  · 技术社区  · 16 年前

    我正在使用Zend Framework作为使用此脚本的站点,在我看来,最好使用我的子类模型 Zend_Db_Abstract 添加和更新数据库。一个人如何着手做这件事?我的脚本是否放在Zend组件(即library/Mine/Xmlparse.php)旁边的库中,从而可以访问各种ZF组件?我是否只需要在文件本身中包含正确的模型文件和Zend DB组件?处理这种集成的最佳方法是什么?

    6 回复  |  直到 13 年前
        1
  •  3
  •   Sebastian Hoitz    16 年前

    是的,您应该将自己的类放在库中Zend Framework文件夹旁边的文件夹中,这些类可以继承Zend Framework类,也可以添加其他类。

    启用Zend_Loader的自动加载后,类名将自动映射到您创建的类,例如:

    My_Db_Abstract will map to My/Db/Abstract.php .
    
        2
  •  2
  •   markus    15 年前

    在库目录中,Zend library文件夹旁边应该有自己的库。无论您如何称呼它(Mylib、Project等等),您都应该将其包含到Zend Autoloader中,具体操作如下:

    require_once 'Zend/Loader/Autoloader.php';
    $loader = Zend_Loader_Autoloader::getInstance();
    $loader->registerNamespace('Project_');
    $loader->setFallbackAutoloader(true);
    if ($configSection == 'development')
    {
        $loader->suppressNotFoundWarnings(false);
    }
    

    为了使您的库与ZF和Autoloader很好地集成,您应该遵守ZF命名约定。这意味着两件事:

    • 如果扩展现有的ZF类,请复制ZF文件夹结构,以便文件除库名称外具有相同的路径和名称。例如/library/Zend/Db/Abstract.php=>/library/Project/Db/Abstract.php。
    • 如果您编写自己的类,仍然要遵循ZF命名约定,以便自动加载程序找到它们。
        3
  •  1
  •   rg88    16 年前

    我刚刚发现了一些可能与这个问题密切相关的东西。 This IBM developerWorks article.

    作者建议只需在ZF层次结构中创建一个scripts文件夹,并像通常在ZF中一样使用它(尽管他设置了ini路径并调用autoload)。有那么简单吗?仅仅是在框架的层次结构中,包括路径和自动加载程序,就可以让脚本访问所有的好东西吗?

        4
  •  1
  •   smack0007    16 年前

    我不是100%确定你想问什么,但我会尽力帮助你。如果在任何时候向php include路径中添加对“/path/to/zend/framework”的引用,那么本质上启用了zend框架。从那里开始,如果您这样做:

    require_once('Zend/Loader.php');
    Zend_Loader::registerAutoload();
    

    然后,在脚本中的任何时候,您都可以创建新的Zend Framework对象,Zend_Loader将处理其余部分。

        5
  •  1
  •   Akeem    16 年前

    我通常把我认为可以跨项目使用的自定义内容放在库中的自定义文件夹中。因此,我有一个library/Ak33m文件夹,其中包含可能在框架之外的脚本。

        6
  •  1
  •   David Weinraub    14 年前

    作为ZF noob的一员,我想我理解OP想要弄明白的一些事情。所以,我只想解释一下我的理解,希望它对OP有帮助(或者更可能对未来的读者有帮助,因为最初的问题太老了,我想OP现在是ZF大师)。

    我知道ZF声称在很大程度上是“随意使用”,因此您无需购买整个结构,如Zend_应用程序、Zend_引导类、整个MVC方法等。

    此外,我了解支持轻松自动加载的类命名和文件位置的约定。前任: class App_Model_User App/Model/User.php

    • 完成了将所有请求推送到的.htaccess魔术 public/index.php
    • 设定你的 APPLICATION_PATH 并在中包含路径 public/index.php
    • 创造你的 Application Bootstrap 对象绑定到配置文件

    http请求->。htaccess->&php->配置

    为我们设置了很多环境,我们需要为不同的入口路径复制一些环境。

    因此,对于您的脚本,我的第一反应是创建一个通用的include文件,该文件反映index.php中发生的大部分内容-设置include路径、应用程序路径、实例化和调用引导,然后执行特定于脚本的处理。

    $application->run(); 不再启动MVC路由器控制器调度处理,而是自行启动。这样,这个单一脚本入口点看起来与web入口点几乎相同,唯一的区别是实例化了哪个应用程序对象。然后将所需应用程序类的名称作为命令行参数传递给脚本。

    但在这里,我承认自己不够自信,只是抛出了一些想法。

    希望这一切能帮助别人。它实际上帮助我把这一切写下来。谢谢,干杯!

    刚刚看到这篇文章: Using Zend Framework from the Command Line

    更新2009-11-20: 和另一篇文章: Cron jobs in Zend Framework | GS Design

    更新2010-02-25: Easy command line scripts with Zend Application - David Caunt