我希望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类型的属性?
答案 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/
目录。