我正在使用zend框架开发rest控制器,我必须在控制器的一个操作方法中使用外部php类。如何添加这个类或从我的控制器动作方法访问它?
我需要写一个自定义库吗?
在我的控制器操作方法中,iam从数据库中获取多边形信息。现在我有一个外部的“AA>”,它可以验证一个点是否在多边形内部。
在这个问题上,我发现我们可以为此编写自定义的库类。但我不确定。因此,我想知道如何将此外部功能包含在控制器动作中。
请引导。

最佳答案

最简单的方法就是将类include

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

        // do something $pointLocation;
    }

您可能也可以使用ZDENLADILER或AutoLoad加载该文件,但是由于类名不遵循PEAR/ZF命名约定,最简单的就是这个。只要实际的类文件可以以某种方式访问,那么把它放在哪里并不重要。
由于这是第三方类,您可以对其进行扩展,使其与zf/pear命名约定相匹配。然后把它放到你的库文件夹中,这样你就可以使用Autoloader:
<?php
include 'path/to/class/file.php';
class My_PointLoader extends pointLoader {}

此文件将放在APPLICATION_ROOT/lib/My/PointLoader.php
在引导程序中,将“my_u”名称空间注册到
$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处理包含。

07-28 13:24