Zend Framework中的自定义类和函数

时间:2011-02-26 13:11:30

标签: php zend-framework

我正在使用Zend Framework开发一个Rest Controller,我必须在控制器的一个动作方法中使用外部php类。如何添加此类或从我的控制器操作方法访问它?

我是否需要编写自定义库?

在我的控制器动作方法中,iam从数据库中获取多边形信息。现在我有一个外部php class,可以验证一个点是否在多边形内。

在这个问题上搜索,我发现我们可以为此编写自定义库类。但我不确定这一点。所以我想知道如何在控制器操作中包含此外部功能。 请指导。

2 个答案:

答案 0 :(得分:5)

我的方法是:

  • 将班级重命名为Zend_Maths_Point_Location
  • 在zend Zend/Maths/Point
  • 中创建以下子文件夹
  • 将文件命名为Location.php并放在上面的文件夹中
  • 在您的控制器中使用:

    $Point = new Zend_Maths_Point_Location

这基本上只是将该类集成到Zend Autoloader规范中,并使其更流畅。

您需要仔细遵循Zend文档以确保其插入而没有任何问题

答案 1 :(得分:4)

最简单的方法是仅仅include类,例如

class PolygonController …
    public function someAction()
    {
        include 'path/to/class/file.php';
        $pointLocation = new pointLocation;

        // do something $pointLocation;
    }

您也可以使用Zend_Loader或Autoloader加载此文件,但由于类名不遵循Pear / ZF命名约定,因此最简单的方法就是这样。只要可以以某种方式访问​​它,放置实际类文件的位置并不重要。


由于这是第三方类,您可以扩展它以使其与ZF / Pear命名约定匹配。然后将其放入库文件夹,以便您可以使用Autoloader:

<?php
include 'path/to/class/file.php';
class My_PointLoader extends pointLoader {}

此文件将放在APPLICATION_ROOT/lib/My/PointLoader.php

在你的引导程序中,用

注册你的“My_”命名空间
$autoloader->registerNamespace('My_');

然后您可以在控制器中执行$pointLoader = new My_PointLoader;,自动装带器将负责包含该文件。


或者,当您想要添加功能或更改类的API时,请使用适配器聚合它,例如

<?php
include 'path/to/class/file.php';
class My_PointLoader_Adapter
{
    protected $_pointLoader;
    public function __construct(pointLoader $pointLoader = NULL)
    {
        if($pointLoader === NULL) {
            $pointLoader = new pointLoader;
        }
        $this->_pointLoader = new pointLoader;
    }
    public function someAdapterMethod($foo)
    {
        $this->_pointLoader->someMethodInPointLoader($foo);
    }
    // … more methods
}

然后添加名称空间前缀,如上所示,以便Autoloader处理包含。