我正在使用CakePHP v2.6并且我正在编写一个shell脚本,该脚本需要与模型的$validates
属性中的验证规则略有不同。
我已经阅读了the book关于动态修改验证的部分,但所有示例都来自模型。当我尝试在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
...
答案 0 :(得分:1)
至少部分问题是你破坏了CakePHP的shell结构。
您需要将__construct方法更改为如下所示:
public function __construct($stdout = null, $stderr = null, $stdin = null) {
parent::__construct($stdout, $stderr, $stdin);
//your code here
}
对于模型的子对象,很难说在没有看到模型代码的情况下可能会干扰实例化,但如果你也覆盖了模型构造函数,那么会干扰正确的模型设置。
答案 1 :(得分:0)
您确定您的shell和Web应用程序运行的是相同的CakePHP核心版本吗?尝试调试CAKE_CORE_INCLUDE_PATH。
我自己使用全球版本,所以当我打电话给#34; cake&#34;它将执行全局版本,如果我调用。\ bin \ cake它将使用repo中的那个(在这种情况下为3.0)
你确定应用程序找到了正确的核心版本吗?有问题的第二条核心在任何情况下都会起作用,因为它存在于2.6之前。我非常确定你的模型不存在核心Model类的正确版本。