我正在開發一個使用Zend Framework的Rest控制器,並且我必須在控制器的一個操作方法中使用外部的php類。我如何添加這個類或從我的控制器操作方法訪問它?Zend框架中的自定義類和函數
我是否需要編寫自定義庫?
在我的控制器操作方法中,iam從數據庫中獲取多邊形信息。現在我有一個外部的php class可以驗證點是否在多邊形內。
在這個問題上以谷歌搜索,我發現我們可以爲此編寫自定義庫類。但我不確定這一點。所以我想知道如何在控制器操作中包含這個外部功能。 請指導。
我正在開發一個使用Zend Framework的Rest控制器,並且我必須在控制器的一個操作方法中使用外部的php類。我如何添加這個類或從我的控制器操作方法訪問它?Zend框架中的自定義類和函數
我是否需要編寫自定義庫?
在我的控制器操作方法中,iam從數據庫中獲取多邊形信息。現在我有一個外部的php class可以驗證點是否在多邊形內。
在這個問題上以谷歌搜索,我發現我們可以爲此編寫自定義庫類。但我不確定這一點。所以我想知道如何在控制器操作中包含這個外部功能。 請指導。
最簡單的方法是隻爲include
這個類。
class PolygonController …
public function someAction()
{
include 'path/to/class/file.php';
$pointLocation = new pointLocation;
// do something $pointLocation;
}
你或許可以加載與Zend_Loader來加載或自動加載該文件爲好,但由於類名簡化版,遵循梨/ ZF的命名規則,最簡單的就是這一點。只要它以某種方式訪問,放置實際的類文件的位置並不重要。
由於這是第三方類,您可以擴展它以使其匹配ZF /梨命名約定。然後把它放到你的庫文件夾,這樣你就可以使用磁帶自動加載機:
<?php
include 'path/to/class/file.php';
class My_PointLoader extends pointLoader {}
該文件將被放置在APPLICATION_ROOT/lib/My/PointLoader.php
而在你的引導,與
$autoloader->registerNamespace('My_');
註冊「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處理包含。
我的做法是這樣的:
Zend_Maths_Point_Location
Zend/Maths/Point
Location.php
和地方在您的控制器中使用:
$Point = new Zend_Maths_Point_Location
這基本上只是集成了全班分成了Zend自動加載磁帶機規格,並使其更加流暢。
您需要仔細關注Zend文檔以確保它沒有任何問題插入
它的工作原理。謝謝。 – 2011-02-26 13:44:56
由於這不是ZF組件,因此您不應該使用Zend前綴或文件夾。用其他東西加前綴,然後用Autoloader註冊前綴。這可以防止在更新ZF庫文件夾時意外刪除。它也可能會混淆整個班級的其他開發人員,並想知道爲什麼他們在官方ZF中找不到任何文檔,或者爲什麼它使用PHP4語法。 – Gordon 2011-02-26 13:46:06
還沒有和Zend一起工作@Gordon,謝謝你。 – RobertPitt 2011-02-26 13:52:51
這不是一個正確的方法。正確的是使用Zend_Loader。 – hsz 2011-02-26 13:26:39
但我需要放置這個類文件在哪裏?在我的控制器或模型或視圖內? – 2011-02-26 13:27:13
@hsz請給我指向ZF文檔,它說:你**有**使用'Zend_Loader'。完全沒有理由使用所有框架組件,僅僅因爲它們存在。 – Gordon 2011-02-26 13:28:05