2

CakePHP 2.x プロジェクトで、Zend Studio にすべてのコントローラーのモデルのクラス タイプを認識させたいと考えています。

これが私が現在行っている方法です。

class MyController extends AppController
{
      public $uses = array('Scan');

      public function index()
      {
          /* @var $scan Scan */
          $scan = $this->Scan;
          // do stuff...
      }
}

上記は問題なく動作し、Zend は Scan クラスへのすべての参照を正しくリファクタリングしますが、すべてのアクションで実行する必要があるため、これは面倒です。

代わりにこれをやりたいです。

class MyController extends AppController
{
      public $uses = array('Scan');

      /** @var Scan */
      public $Scan;

      public function index()
      {
          // do stuff...
          $this->Scan->.....
      }
}

プロパティとして宣言しようとすると、 $this->Scan がnullになり、Cake がモデルをロードしていません。

CakePHP を壊さずに phpDoc タイプのプロパティとして宣言する方法はありますか?

4

1 に答える 1

2

CakePHPは、このvarialbeをコントローラーに自動的にアタッチします。基本的に実行しているのは、それを再宣言することです。

これがCakeの内部でどのように行われるかは完全にはわかりませんが、$Scan以前に宣言してみました$usesか?もう1つの方法は、コントローラーのコンストラクターを再宣言してこれを回避することですが、それは少し行き過ぎのようです。

トータルリファクタリング機能は私たちがまだ待ち望んでいるものであり、PSR標準、特に名前空間が完全に採用される予定です。

編集:ビューにヘルパーのオートコンプリートを追加するための気の利いた(ハック)方法は次のとおりです。これは、CakePHP> = 2で、ビューでのみ機能します。また、これはEclipseでのみ使用しましたが、OOPおよびPHPDocベースであるため、どのIDEでも機能するはずです。

「必要なのは、次の内容のapp/Viewディレクトリ(ではなく)に「ThisHelper.php」というファイルを作成することだけです。View/Helper

App::uses('AppHelper', 'Helper');
/**
 * this Helper
 *
 * @property Html $Html
 * @property Session $Session
 * @property Form $Form
 */
class this extends AppHelper
{
    var $Html;
    var $Session;
    var $Form;

    public function __contruct()
    {
        $this->Html = new HtmlHelper($View);
        $this->Session = new SessionHelper($View);        
        $this->Form = new FormHelper($View);        
    }
}

$this = new this();

他のヘルパー(Cakeコアかどうか)のサポートを追加するには、これらを変数としてこのクラスに追加します。たとえば、PaginatorHelperを追加する場合は、次のようにします。

@property Paginator $Paginator
....
var $Paginator;
.....
public function __contruct()
{
    .............
    $this->Paginator = new PaginatorHelper($View);
}

おそらく最善の方法は、CakePHPで利用可能なすべてのCoreHelperのプロパティを追加することです。もちろん、カスタムヘルパーを追加すると、どのヘルパーでも機能します。このファイルをPHPスクリプトに含める必要はありませんapp/View/。ディレクトリに追加するだけです。

于 2013-02-01T09:33:12.103 に答える