5

Zend_Tool 很好,它会生成一个具有给定名称和给定路径的项目。

但过了一段时间,我开始开发自己的工具,比如助手、插件、验证器等......

我把它们都放在图书馆里,这没关系(并且推荐)。

但是,我必须使用相同的引导文件启动我的项目,包括我的插件、助手、翻译对象、数据库对象等的初始化。

有些可以在 application.ini 中完成。

然后,我希望能够编写自己的通用 application.ini,在我的引导程序中编写一些初始化代码,也许是一些目录,等等......

什么/你是怎么做的?

4

3 回答 3

3

我想一种解决方案是编辑 library/zend/Tool/Project/Context/Zf 中的文件,这些文件似乎提供了用于开箱即用项目的内容/结构。

但这听起来不像是正确的解决方案。此外,在我正在进行的研究中,我已经发现该工具(zf.bat 或 sh)会扫描 php inculde_path 上的所有目录以查找“清单”和“提供者”,这反过来又为该工具提供了功能。

Zend 开发人员的文章Zend_Tool for the Developer刚刚澄清了一些事情。

清单

可用于捆绑和“加载”任意数量的提供程序。

提供者

提供者反过来是您想要使用的 CLI 命令的实际容器,其设计类似于“控制器/动作”设计。您可以通过调用从命令提示符调用特定类(控制器)的方法(操作):

zf <method-name> <class-name>

鉴于此类扩展 Zend_Tool_Project_Provider_Abstract

随后我发现让负责设置开箱即用布局的提供者的清单位于:

库\Zend\Tool\Project\Provider\Manifest.php

在此文件中,将以下提供程序返回给工具:

public function getProviders()
{
    return array(
        new Zend_Tool_Project_Provider_Profile(),
        new Zend_Tool_Project_Provider_Project(),
        new Zend_Tool_Project_Provider_Controller(),
        new Zend_Tool_Project_Provider_Action(),
        new Zend_Tool_Project_Provider_View(),
        new Zend_Tool_Project_Provider_Module(),
        new Zend_Tool_Project_Provider_ProjectProvider()
    );
}

这些显然是可用的默认 CLI 命令。

此外,很明显,您可以通过提供您自己的 xml 项目配置文件来对创建的内容产生很大影响,该配置文件默认在 library/Zend/Tool/Project/Provider/Project 的方法 _getDefaultProfile() 中创建。

我现在正在尝试什么

  • 用我自己的东西覆盖默认提供者和默认清单,并在我自己的项目提供者中覆盖 _getDefaultProfile() 并将一些东西设置为 true 而不是 false。

我在 CLI 不接受我的提供程序时遇到了一些问题。我会报告进度的!

于 2009-09-26T22:39:31.977 回答
0

模块可用于项目级别的代码重用:

http://framework.zend.com/manual/en/zend.controller.modular.html

如果您有一个与现有项目功能相似的新项目,您可以向现有项目添加一个新模块,并在 application.ini 文件中打开/关闭特定模块。特定于模块的初始化可以包含在它们自己的引导程序中。

但这并不完全简单......

几个月前我尝试时,Zend_Tool 在创建模块目录结构时遇到了问题,我不得不手动创建它。此外,您可能需要的某些功能(特定于模块的配置文件、合并的导航定义和/或特定的部署配置)目前还没有内置到 Zend Framework 中,需要编写。

对于我的设置,每个部署都有一个 application.ini(application-foo.ini、application-bar.ini)。使用 .htaccess 文件中设置的环境变量 (SetEnv APP_DEPLOYMENT foo),通过引导程序 (index.php) 中的自定义逻辑选择适当的 ini 文件。模块的通用配置被放入模块特定的配置文件中,通过 Zend_Application_Resource_Modules 的自定义子类加载。

可以运行部署过程以根据站点排除任何不需要的模块、公共文件和/或库。Phing、Capistrano 或 Ant 对此很有用。

于 2009-09-04T03:48:05.933 回答
0

如果需要,您可以扩展 zend 工具类。但我认为最好在库中有你自己的 Bootstrap 类,然后将生成的更改class Boostrap extends Zend_Application_Boostrap_Bootstrapextends My_Bootstrap

于 2009-09-03T15:17:05.207 回答