2010-03-22 76 views
6

我有一个ZF 1.10应用程序中的自定义类的文件夹。该文件夹位于/库中。我怎么能告诉ZF他们在哪里? application.ini和index.php都设置了库的路径,但ZF无法找到这些文件。如何指示我的自定义类的zend框架

谢谢

回答

8

有很多可能的解决方案。最常见的,使用Zend应用时,是通过将注册在application.ini命名空间:

autoloaderNamespaces[] = "Example_" 

其他的解决方案:

  • 添加您的目录到include_path使用set_include_path()(临时解决方案)
  • 遵循PEAR命名约定(因此可以解析路径)

在中设置自动装载机0:

protected function _initAutoloader() 
{ 
    $autoloader = Zend_Loader_Autoloader::getInstance(); 
    $autoloader->registerNamespace("Example"); // or Example_ 
} 

最终,建立模块或resource autoloader,例如,

$resourceLoader->addResourceTypes(array(
    'acl' => array(
     'path'  => 'acls/', 
     'namespace' => 'Acl', 
    ), 
    'example' => array(
     'path'  => 'examples/', 
     'namespace' => 'Example', 
    ),   
)); 
+0

谢谢takehin,它工作! “$ autoloader-> registerNamespace(..”dit it! – curro 2010-03-22 23:01:01

+0

嗨,漂亮的老帖子问这个问题,但你仍然可以帮助我吗?'Zend(1.12)'我有一个Directory'Example'和一个类'Example_Test ''直接在'Example'下面,我注册了一个命名空间'Example',然后当我在我的'php'代码中访问类Example_Test'时,我可以毫无问题地做到这一点,但是当我查看getClassPath()在'Zend_Loader_Autoloader_Resource'里面,它没有返回一个有效的路径(一些条件),所以这意味着这个文件不会被'autoload()'方法加载,那么它是如何实际加载的? – 2017-07-19 06:09:25

1

退房this older Zend Framework tutorial from Rob Allen,4页专门对,他谈到了引导程序。他的新教程尽管非常出色,但似乎依赖于Zend Tool来创建应用程序并对其进行研究。

然而,有一件事令我震惊,那就是你提到你试图包含的文件夹是public/library。除非你有意与世界分享你的代码,否则我强烈建议你将它放在其他地方......除非你有一个不同的“公共”文件夹而不是与公众分享(在这种情况下你可能需要考虑重命名它以避免将来的混淆)。

+0

谢谢你,卡尔。对不起,我没有公共目录中的图书馆。这只是一个错误。它位于“根”目录中。 – curro 2010-03-22 21:09:31

+0

Rob Allen教程依赖于ZF 1.5。我使用的版本是1.10。尽管它创建了一个Bootstrap文件,但Bootstrap类是空的。一切工作正常,除了自定义类。我在另一个地方有ZF库,并有PHP包含路径指向它。 – curro 2010-03-22 21:16:57

+0

它的肉和土豆应该是set_include_path,我认为你至少可以把它放在空的bootstrap类中。此外,罗布在他的网站上更新了教程1.10。 – 2010-03-22 21:25:26

24

我们经常会遇到编写我们自己的自定义函数或类以及放置它们的问题。

因此,要添加自定义类(或自定义库),可以使用zend框架的自动加载器命名空间。

添加以下行的application.ini文件

autoloaderNamespaces.custom = "Custom_" 

OR

autoloaderNamespaces[] = "Custom_" 

所有自定义类图书馆目录下保存。在库目录中创建一个文件夹名称'Custom'(在application.ini中定义)。

班会以“Custom_”在声明文件(例如Custom_Test)的前缀

现在我们可以使用这个类为$test = new Custom_Test(),在我们的应用程序。

+0

对于那些正在查看我认为这种方法比接受的答案更受欢迎 – 2011-10-22 12:58:59

+0

我同意Angl.King.47和Muhammad Yaseen - 根据我自己的经验,这是一种更简单,更高效的方式来包含自己的类库另外,zend中的标准index.php将包含li bra包目录在PHP include路径中。 – 2011-11-17 09:59:33

0

将您的自定义库添加到作曲家。JSON:

"autoload": { 
"psr-0": {"Your": "vendor/My/library"} 
}, 

和运行作曲家更新