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->Scan 是null,并且 Cake 没有加载模型。

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

4

1 回答 1

2

CakePHP 会自动将此变量附加到您的控制器上,而您实际上所做的是重新声明它。

我不完全确定这是如何在 Cake 内部完成的,但你$Scan之前尝试过声明$uses吗?另一种方法是重新声明控制器的构造函数来解决这个问题,但这似乎有点牵强。

完全重构能力是我们仍在等待的东西,它将伴随对 PSR 标准的完全采用,尤其是命名空间。

编辑:这是一种在视图中为助手添加自动完成的漂亮(hack)方法。这将适用于 CakePHP >= 2并且仅适用于 Views。我也只在 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();

要添加对其他助手的支持(是否有蛋糕核心),只需将它们作为变量添加到此类中,例如,如果您想添加 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 回答