我希望 Zend Studio 能够识别 CakePHP 2.x 项目中所有 Controller 模型的类类型。
这就是我目前的做法。
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 类型的属性?
请您参考如下方法:
CakePHP 会自动将此变量附加到您的 Controller ,而您实际上要做的就是重新声明它。
我不完全清楚这是如何在 Cake 内部完成的,但是您是否尝试过在 $uses
之前声明 $Scan
? 另一种方法是重新声明 Controller 的构造函数来解决这个问题,但这似乎有点牵强。
我们仍在等待全面的重构能力,它将随着 PSR 标准(尤其是命名空间)的全面采用而出现。
编辑: 这是在 View 中为帮助程序添加自动完成功能的一种巧妙(黑客)方法。这适用于 CakePHP >= 2,并且仅在 View 中。另外,我只在 Eclipse 中使用过它,但我认为它应该可以在任何 IDE 中工作,因为它是基于 OOP 和 PHPDoc 的。
“您需要做的就是:在 app/View
目录中(而不是在 View/Helper
中)创建一个名为“ThisHelper.php”的文件,其中包含以下内容:
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 中可用的所有 CoreHelpers 添加属性。 当然,如果您添加任何自定义助手,它都可以与它们一起使用。您不需要将此文件包含在任何 PHP 脚本中 - 只需将其添加到 app/View/
目录即可。