Php Zend框架存储修改类的方式?

Php Zend框架存储修改类的方式?,php,zend-framework,zend-translate,Php,Zend Framework,Zend Translate,我有一个使用Zend Framework和Zend_Translate的项目 我不得不将标准的CSV适配器稍微修改为Zend_Translate。现在我面临的问题是,把这个修改过的适配器放在哪里 默认情况下,适配器存储在 /Library/Zend/Translate/Adapter/Adaptername.php 这也是我放置新适配器的地方 然而,我不想用我的自定义扩展“污染”Zend库:我希望能够在不必担心丢失文件的情况下更新ZF;我希望能够继续使用集中安装的ZF版本;自定义适配器是我正在

我有一个使用Zend Framework和Zend_Translate的项目

我不得不将标准的CSV适配器稍微修改为Zend_Translate。现在我面临的问题是,把这个修改过的适配器放在哪里

默认情况下,适配器存储在

/Library/Zend/Translate/Adapter/Adaptername.php
这也是我放置新适配器的地方

然而,我不想用我的自定义扩展“污染”Zend库:我希望能够在不必担心丢失文件的情况下更新ZF;我希望能够继续使用集中安装的ZF版本;自定义适配器是我正在进行的项目的一部分,真的

有没有Zend Framework方法来处理这个问题,或者指定另一个加载位置

语言适配器是使用

$this->_adapter = new $adapter($data, $locale, $options); 
(其中,
$adapter
将是
Zend\u Translate\u adapter\u adapter name


因此,标准的自动加载规则适用。有没有简单的方法告诉Zend Autoloader查找第二个位置?

您可以将其添加到lib文件夹中

/lib
 /Zend
  /Translate
   /Adapter
    /Csv.php
 /My
  /Translate
   /Adapter
    /Csv.php
根据自动加载器的设置方式


或者,如果你不喜欢这个,把它放到你的模型文件夹里。基本上,你把它放在哪里并不重要,只要它能被自动加载器以某种方式访问。Zend_Autoloader可以注册任意的Autoloader回调,因此这完全取决于您。

您可以将其添加到lib文件夹

/lib
 /Zend
  /Translate
   /Adapter
    /Csv.php
 /My
  /Translate
   /Adapter
    /Csv.php
根据自动加载器的设置方式


或者,如果你不喜欢这个,把它放到你的模型文件夹里。基本上,你把它放在哪里并不重要,只要它能被自动加载器以某种方式访问。Zend_Autoloader可以注册任意的Autoloader回调,所以这真的取决于你。

根据这个网站的规则,我不能对Gordon的答案发表评论,但他是对的。要回答有关如何加载适配器的问题,需要将完整的类名传递给translate对象的构造函数:

$translate = new Zend_Translate('My_Translate_Adapter_Class', ...); $translate=new Zend_translate('My_translate_Adapter_Class',…); 如果您传入了一个短名称(如“gettext”),组件首先检查Zend命名空间,然后将尝试直接将适配器名称作为类加载


至少,这在1.10中是正确的,我想这已经有一段时间了。

由于本网站的规则,我不能对Gordon的答案发表评论,但他说得对。要回答有关如何加载适配器的问题,需要将完整的类名传递给translate对象的构造函数:

$translate = new Zend_Translate('My_Translate_Adapter_Class', ...); $translate=new Zend_translate('My_translate_Adapter_Class',…); 如果您传入了一个短名称(如“gettext”),组件首先检查Zend命名空间,然后将尝试直接将适配器名称作为类加载


至少,这在1.10中是正确的,我想这已经有一段时间了。

我的答案几乎是一样的,你的答案只是措辞更好:)+1Cheers@Gordon,但这意味着我也必须重写
Zend_Translate
本身,对吗?因为它从
Zend\u Translate\u Adapter
构造类名。。。根据您传递的
$adapter
参数,top不可能将其改为
My\u Translate\u adapter\u…
。我要做的是让Zend在两个目录结构中查找同一名称空间——这很可能是不可能的。我会调查Zend_Loader,看看能找到什么。@Pekka不,那不必要。看到欢呼声,我忽略了这一点(甚至在源代码中查看它是否确实做到了这一点。)它现在与自定义类一起工作。谢谢我的回答几乎是一样的,你的回答只是措辞好得多:)+1Cheers@Gordon,但这意味着我也必须重写
Zend\u Translate
本身,对吗?因为它从
Zend\u Translate\u Adapter
构造类名。。。根据您传递的
$adapter
参数,top不可能将其改为
My\u Translate\u adapter\u…
。我要做的是让Zend在两个目录结构中查找同一名称空间——这很可能是不可能的。我会调查Zend_Loader,看看能找到什么。@Pekka不,那不必要。看到欢呼声,我忽略了这一点(甚至在源代码中查看它是否确实做到了这一点。)它现在与自定义类一起工作。谢谢