2011-02-26 14 views
3

Zend Frameworkを使用してRest Controllerを開発しています。私は、コントローラのアクションメソッドの1つで外部PHPクラスを使用する必要があります。どのように私はこのクラスを追加するか、コントローラアクションメソッドからアクセスできますか?Zend Frameworkのカスタムクラスと関数

カスタムライブラリを作成する必要はありますか?

私のコントローラの動作方法では、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の命名規則に従ってdoes't以来、最も簡単にはこれです。何らかの形でアクセスできる限り、実際のクラスファイルをどこに置いても問題ありません。


これはサードパーティ製のクラスなので、ZF/Pearの命名規則に一致するように拡張することができます。あなたがオートローダーを使用できるようにその後、あなたのライブラリーのフォルダにそれを置く:

<?php 
include 'path/to/class/file.php'; 
class My_PointLoader extends pointLoader {} 

このファイルは

$autoloader->registerNamespace('My_'); 
であなたの「My_」名前空間を登録し、 APPLICATION_ROOT/lib/My/PointLoader.php

にそして、あなたのブートストラップに配置されるだろう

コントローラで$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 
} 

次に、上記のように名前空間の接頭辞を追加すると、オートローダーがインクルードを処理します。

+0

これは正しい方法ではありません。正しいものはZend_Loaderを使うことです。 – hsz

+0

しかし、このクラスファイルはどこに置く必要がありますか?私のコントローラやモデルやビューの中に? –

+2

@hsz ZFドキュメントには、Zend_Loaderを使う**あなたは**持っていると指摘してください。フレームワークコンポーネントが存在するため、すべてのフレームワークコンポーネントを使用する必要はありません。 – Gordon

5

私のアプローチは、のようになります。

  • はZendのでZend/Maths/Point
  • 名以上のフォルダ内のファイルLocation.phpと場所を以下のサブフォルダを作成しますZend_Maths_Point_Location
  • にクラスの名前を変更し
  • あなたのコントローラで:

    $Point = new Zend_Maths_Point_Location

これは基本的にクラスをZend Autoloader仕様に統合し、より流暢にします。

Zendドキュメントに慎重に従って問題なくスロットに挿入する必要があります。

+0

それは動作します。ありがとう。 –

+3

これはZFコンポーネントではないので、Zend接頭辞またはフォルダを使用しないでください。プレフィックスに何か他のものを付けて、オートローダーにプレフィックスを登録してください。これにより、ZFライブラリフォルダを更新するときに誤って削除されることがなくなります。また、他の開発者を混乱させるかもしれません。なぜなら、公式のZFでドキュメントを見つけることができない理由、あるいはなぜPHP4の構文を使用しているのかが不思議です。 – Gordon

+1

@Gordonの年齢でZendと仕事をしていない、ありがとう。 – RobertPitt