我正在使用CakePHP v2.6,我正在编写一个shell脚本,该脚本需要具有与模型$validates
属性中的验证规则略有不同的验证规则。
我已经阅读了书中关于动态修改验证的部分,但所有示例都来自模型中。当我尝试在 shell 脚本中执行$this->MyModel->validator()
时,我得到:
Fatal Error Error: Call to undefined function validator()
这是为什么呢?
更新:奇怪的是,以下代码确实有效:
unset($this->MyModel->validate['fieldName'] );
我的代码:
<?php
App::uses('AppShell', 'Console/Command');
App::uses('CakeSchema', 'Model');
class ScrapeShell extends AppShell {
public $uses = array('Listing', 'Neighborhood', 'ListingPhoto');
function __construct() {
parent::__construct();
//initialize some variables
}
public function myMethod() {
#bypass validation on description to allow HTML
unset($this->Listing->validate['description'] ); //this works
//$this->Listing->validator()->remove('description', 'noTags'); //this errors
...
至少部分问题在于你破坏了 CakePHP 的 shell 结构。
您需要将__construct方法更改为如下所示:
public function __construct($stdout = null, $stderr = null, $stdin = null) {
parent::__construct($stdout, $stderr, $stdin);
//your code here
}
至于模型的子对象,如果不看到模型代码,很难说什么会干扰该实例化,但如果也覆盖了模型构造函数,则可能会干扰正确的模型设置。
你确定你的shell和Web应用程序运行的是相同的CakePHP核心版本吗?尝试调试CAKE_CORE_INCLUDE_PATH。
我自己使用的是全局版本,所以当我只调用"cake"时,它将执行全局版本,如果我调用 .\bin\cake,它将使用存储库中的版本(在本例中为 3.0)
您确定该应用程序找到了正确的核心版本吗?有问题的核心第二行在任何情况下都可以工作,因为它在 2.6 之前就已经存在了。我很确定您的模型不存在核心模型类的正确版本。