2011-02-26 68 views
3

我正在開發一個使用Zend Framework的Rest控制器,並且我必須在控制器的一個操作方法中使用外部的php類。我如何添加這個類或從我的控制器操作方法訪問它?Zend框架中的自定義類和函數

我是否需要編寫自定義庫?

在我的控制器操作方法中,iam從數據庫中獲取多邊形信息。現在我有一個外部的php class可以驗證點是否在多邊形內。

在這個問題上以谷歌搜索,我發現我們可以爲此編寫自定義庫類。但我不確定這一點。所以我想知道如何在控制器操作中包含這個外部功能。 請指導。

回答

4

最簡單的方法是隻爲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處理包含。

+0

這不是一個正確的方法。正確的是使用Zend_Loader。 – hsz 2011-02-26 13:26:39

+0

但我需要放置這個類文件在哪裏?在我的控制器或模型或視圖內? – 2011-02-26 13:27:13

+2

@hsz請給我指向ZF文檔,它說:你**有**使用'Zend_Loader'。完全沒有理由使用所有框架組件,僅僅因爲它們存在。 – Gordon 2011-02-26 13:28:05

5

我的做法是這樣的:

  • 重命名類Zend_Maths_Point_Location
  • 在Zend中創建下面的子文件夾Zend/Maths/Point
  • 名稱上面的文件夾中的文件Location.php和地方
  • 在您的控制器中使用:

    $Point = new Zend_Maths_Point_Location

這基本上只是集成了全班分成了Zend自動加載磁帶機規格,並使其更加流暢。

您需要仔細關注Zend文檔以確保它沒有任何問題插入

+0

它的工作原理。謝謝。 – 2011-02-26 13:44:56

+3

由於這不是ZF組件,因此您不應該使用Zend前綴或文件夾。用其他東西加前綴,然後用Autoloader註冊前綴。這可以防止在更新ZF庫文件夾時意外刪除。它也可能會混淆整個班級的其他開發人員,並想知道爲什麼他們在官方ZF中找不到任何文檔,或者爲什麼它使用PHP4語法。 – Gordon 2011-02-26 13:46:06

+1

還沒有和Zend一起工作@Gordon,謝謝你。 – RobertPitt 2011-02-26 13:52:51