如何让Zend Studio自动完成CakePHP模型的使用?

时间:2013-01-31 18:43:53

标签: php cakephp zend-studio eclipse-pdt cakephp-2.2

我希望Zend Studio能够在CakePHP 2.x项目中识别所有控制器模型的类类型。

这就是我目前的做法。

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->扫描为null,而Cake未加载模型。

有没有办法在不破坏CakePHP的情况下将其声明为具有phpDoc类型的属性?

1 个答案:

答案 0 :(得分:2)

CakePHP会自动将此varialbe附加到您的Controller,而您实际上正在重新声明它。

我不完全知道这是如何在Cake内部完成的,但您是否尝试在$Scan之前声明$uses? 另一种方法是重新声明Controller的构造函数来解决这个问题,但这看起来有点过于牵强。

我们仍在等待完全重构功能,它将完全采用PSR标准,特别是命名空间。

编辑: 这是为视图中的助手添加autoComplete的一种漂亮(黑客)方式。此适用于CakePHP> = 2 仅适用于视图。另外我只在Eclipse中使用它,但我认为它应该可以在任何IDE中使用,因为它是基于OOP和PHPDoc的。

“您需要做的就是:在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/目录。