我正在使用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处理包含。