CakePHP如何从shell脚本修改验证

时间:2015-01-26 22:22:09

标签: php shell validation cakephp cakephp-2.0

我正在使用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
       ...

2 个答案:

答案 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类的正确版本。