我正在使用Zend Framework开发一个Rest Controller,我必须在控制器的一个动作方法中使用外部php类。如何添加此类或从我的控制器操作方法访问它?
我是否需要编写自定义库?
在我的控制器动作方法中,iam从数据库中获取多边形信息。现在我有一个外部php class,可以验证一个点是否在多边形内。
在这个问题上搜索,我发现我们可以为此编写自定义库类。但我不确定这一点。所以我想知道如何在控制器操作中包含此外部功能。 请指导。
答案 0 :(得分:5)
我的方法是:
Zend_Maths_Point_Location
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处理包含。