Skip to main content
 首页 » 编程设计

php中如何让 Zend Studio 自动完成与 CakePHP 模型一起工作

2024年09月07日191zhujiabin

我希望 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/ 目录即可。