我如何自定义Zend_Tool以提供我自己的骨架/模板?

时间:2009-09-03 14:41:03

标签: php zend-framework zend-tool

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

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

我将它们全部放在库中,这是可以的(并建议)。

但是,我必须使用相同的引导程序文件启动我的项目,包括我的插件,帮助程序,转换对象,数据库对象等的初始化。

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

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

你/你怎么做?

3 个答案:

答案 0 :(得分: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的\工具\项目\提供商\ 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项目配置文件(默认情况下在库/ Zend / Tool / Project / Provider /中创建),显然可以对创建的内容产生很大影响方法_getDefaultProfile()中的项目。

我现在正在尝试

  • 使用我自己的东西覆盖默认的Providers和默认Manifest,并在我自己的Project Provider中覆盖_getDefaultProfile()并将一些东西设置为true而不是false。

我遇到一些CLI无法接受我的提供商的问题。 我会报告进展情况!

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

但这并非完全直截了当......

几个月前,当我尝试时,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对此很有好处。