首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP为请求中未包含的字段引发验证错误。

CakePHP为请求中未包含的字段引发验证错误。
EN

Stack Overflow用户
提问于 2014-08-07 10:08:24
回答 1查看 289关注 0票数 1

我是这样理解CakePHP验证的:只有请求中的字段(例如,“Post”和“Post”)在appmodel中得到验证,即使在appmodel中还有更多字段的声明。

现在我称之为->Post->save($this->request->data),Cake为请求中的字段抛出验证错误,而现在我不知道该做什么。

主计长:

调试此->请求->数据:

代码语言:javascript
复制
array(
    'Post' => array(
        'TYPE' => '1',
        'B/S' => 'S',
        'LATITUDE' => '50.98549',
        'LONGITUDE' => '11.31551',
        'CART' => 'jkl',
        'MARKET' => 'jk',
        'INCOMETYPE' => '1',
        'INCOME' => '8',
        'DEADLINE' => '1',
        'DATE' => '31.08.2014',
        'TIME' => '',
        'PREFERREDDATES' => 'nach Absprache',
        'address' => 'Fuldaer Straße, 99423, Weimar',
        'STREET' => 'Fuldaer Straße',
        'DELIVERYAREA' => '99423',
        'CITY' => 'Weimar',
        'TEL' => '1234567654321',
        'saveAppendix' => 'edit'
    )
)

主计长:

调试$this->:

代码语言:javascript
复制
array(
    'ZIPCODE' => array(
        (int) 0 => 'Bitte eine gültige Postleitzahl eingeben.'
    ),
    'VEHICLE' => array(
        (int) 0 => 'Bitte das Fahrzeug angeben'
    ),
    'SPACE' => array(
        (int) 0 => 'Bitte den verfügbaren Platz angeben'
    )
)

主计长:

带有调试语句的代码:

代码语言:javascript
复制
if (isset($this->request->data['Post']['saveAppendix']) && $this->request->data['Post']['saveAppendix'] == "edit") {
                    debug($this->request->data);
                    if ($this->Post->save($this->request->data)) {
                        $this->Session->setFlash('Dein Inserat wurde erfolgreich bearbeitet.', 'flash_success');
                        $this->set('action', 'goToIndex');
                        $this->render('addRedirect', 'ajax');
                    } else {
                        debug($this->Post->validationErrors);
                        ...further code...
                    }
}

根据burzum的请求,编辑,验证规则:

代码语言:javascript
复制
class Post extends AppModel {

    public function beforeValidate(array $options = array()) {
        $request = $this->data[$this->alias];
        if (isset($request['INCOMETYPE']) && ($request['INCOMETYPE'] == "1" || isset($request['INCOMETYPE']) && $request['INCOMETYPE'] == "2")) {
            $this->data[$this->alias]['INCOME'] = preg_replace(
                '/^([^,]*).*$/', '$1', $request['INCOME']
            );
            $this->data[$this->alias]['INCOME'] = preg_replace(
                '/\D/', '', $request['INCOME']
            );
        };
        //für validation die schaltungsart-variablen setzen
        if (isset($request['DEADLINE']) && $request['DEADLINE'] == "1") {
            $this->validator()->remove('TIME');
            $date = $request['DATE'];           
        };
        if (isset($request['DEADLINE']) && $request['DEADLINE'] == "2") {
            $this->validator()->remove('PREFERREDDATES');
            $date = $request['DATE'];
        };
        if (isset($request['DEADLINE']) && $request['DEADLINE'] == "3") {
            $this->validator()->remove('DATE');
            $this->validator()->remove('TIME');
        };
        if (isset($date) && $date <> "") {
            //datepicker date in sortierbares datum wandeln: Y M D
            $tmpdate = list($day, $month, $year) = explode('.', $date);
            $altdate = $year.$month.$day;
            $this->data[$this->alias]['ALTDATE'] = $altdate;
        };          
        if (isset($request['INCOMETYPE']) && $request['INCOMETYPE'] == "4") {
            $this->validator()->remove('INCOME');
        };
        if (isset($request['INCOMETYPE']) && $request['INCOMETYPE'] == "5") {
            $this->validator()->remove('INCOME');
        };
        // B/S-Feld füllen mit entsprechendem String
        if (isset($request['TYPE']) && isset($request['B/S'])) {
            if ($request['TYPE'] == 1 && $request['B/S'] == "S") {
                $this->data[$this->alias]['B/S'] = "Suche Kurier";
            };
            if ($request['TYPE'] == 2 && $request['B/S'] == "S") {
                $this->data[$this->alias]['B/S'] = "Suche Bildungsdienstleistung";
            };
            if ($request['TYPE'] == 3 && $request['B/S'] == "S") {
                $this->data[$this->alias]['B/S'] = "Suche Elektronik & Technik";
            };
            if ($request['TYPE'] == 4 && $request['B/S'] == "S") {
                $this->data[$this->alias]['B/S'] = "Suche Freizeit & Sport";
            };
            if ($request['TYPE'] == 5 && $request['B/S'] == "S") {
                $this->data[$this->alias]['B/S'] = "Suche Haushalt und Garten";
            };
            if ($request['TYPE'] == 6 && $request['B/S'] == "S") {
                $this->data[$this->alias]['B/S'] = "Suche Soziales";
            };
            if ($request['TYPE'] == 1 && $request['B/S'] == "B") {
                $this->data[$this->alias]['B/S'] = "Biete Kurier";
            };
            if ($request['TYPE'] == 2 && $request['B/S'] == "B") {
                $this->data[$this->alias]['B/S'] = "Biete Bildungsdienstleistung";
            };
            if ($request['TYPE'] == 3 && $request['B/S'] == "B") {
                $this->data[$this->alias]['B/S'] = "Biete Elektronik & Technik";
            };
            if ($request['TYPE'] == 4 && $request['B/S'] == "B") {
                $this->data[$this->alias]['B/S'] = "Biete Freizeit & Sport";
            };
            if ($request['TYPE'] == 5 && $request['B/S'] == "B") {
                $this->data[$this->alias]['B/S'] = "Biete Haushalt & Garten";
            };
            if ($request['TYPE'] == 6 && $request['B/S'] == "B") {
                $this->data[$this->alias]['B/S'] = "Biete Soziales";
            };
        };

        //inserat-datum darf nicht in vergangenheit liegen
        /*if ($request['DATE'] == date("d.m.Y") && $request['TIME'] < date("H:i")) {
            unset($this->data[$this->alias]['TIME']);
        };*/
        return parent::beforeValidate($options);
    }

   var $validate = array(
        'STREET' => array(
            'rule-1' => array(
                'rule' => 'notEmpty',
                'message' => 'Hidden input B/S wurde geändert'
            ),
            'rule-2' => array(
                'rule'    => '/^[a-z]{1,}$/i',
                'message' => 'Hacker kommen hier nicht weit!'
            )
        ),
        'STREET' => array(
            'rule-1' => array(
                'rule' => 'notEmpty',
                'message' => 'Bitte eine Straße angeben'
            ),
            'rule-2' => array(
                'rule'    => '/^[a-z0-9_äÄöÖüÜß§$%&*\/\d\w\s?!\.:,\'"\(\)=\+-]{1,}$/i',
                'message' => 'Hacker kommen hier nicht weit!'
            )
        ),
        'HOUSENUMBER' => array(
           'rule-1' => array(
                'rule' => 'notEmpty',
                'message' => 'Bitte eine Hausnummer angeben'
            ),
            'rule-2' => array(
                'rule'    => '/^[a-z0-9_äÄöÖüÜß§$%&*\/\d\w\s?!\.:,\'"\(\)=\+-]{1,}$/i',
                'message' => 'Hacker kommen hier nicht weit!'
            )
        ),
        'ZIPCODE' => array(
            'rule-1' => array(
                'rule' => array('postal', null, 'de'),
                'message' => 'Bitte eine gültige Postleitzahl eingeben.',
                'last' => true
            ),
            'rule-2' => array(
                'rule' => array('ZipExists'),
                'message' => 'Postleitzahl existiert nicht!'  
            )
        ),
        'CITY' => array(
            'rule-1' => array(
                'rule' => 'notEmpty',
                'message' => 'Bitte eine Stadt angeben'
            ),
            'rule-2' => array(
                'rule'    => '/^[a-z0-9_äÄöÖüÜß§$%&*\/\d\w\s?!\.:,\'"\(\)=\+-]{1,}$/i',
                'message' => 'Hacker kommen hier nicht weit!'
            )
        ),
        'CART' => array(
            'rule-1' => array(
                'rule' => 'notEmpty',
                'message' => 'Bitte etwas eingeben'
            ),
            'rule-2' => array(
                'rule'    => '/^[a-z0-9_äÄöÖüÜß§$%&*\/\d\w\s?!\.:,\'"\(\)=\+-]{1,}$/i',
                'message' => 'Hacker kommen hier nicht weit!'
            )
        ),
        'MISC' => array(
            'rule-1' => array(
                'allowEmpty' => true
            ),
            'rule-2' => array(
                'rule'    => '/^[a-z0-9_äÄöÖüÜß§$%&*\/\d\w\s?!\.:,\'"\(\)=\+-]{1,}$/i',
                'message' => 'Hacker kommen hier nicht weit!'
            )
        ),
        'MARKET' => array(
            'rule-1' => array(
                'rule' => 'notEmpty',
                'message' => 'Bitte einen Markt angeben'
            ),
            'rule-2' => array(
                'rule'    => '/^[a-z0-9_äÄöÖüÜß§$%&*\/\d\w\s?!\.:,\'"\(\)=\+-]{1,}$/i',
                'message' => 'Hacker kommen hier nicht weit!'
            )
        ),
        'DATE' => array(
            'rule' => 'notEmpty',
            'required' => 'true',
            'message' => 'Bitte das Datum eingeben'
        ),
        'PREFERREDDATES' => array(
            'rule' => 'notEmpty',
            'required' => 'true',
            'message' => 'Bitte die passenden Zeiten eingeben'
        ),
        'DEADLINE' => array(
            'rule' => 'notEmpty',
            'required' => 'true',
            'message' => 'Bitte die Art der Schaltung festlegen'
        ),
        'TIME' => array(
            'rule' => 'time',
            'required' => 'true',
            'message' => 'Bitte die Zeit eingeben'
        ),
        'INCOME' => array(
            'rule' => 'notEmpty',
            'required' => 'true',
            'message' => 'Bitte die Bezahlung eingeben'
        ),
        /*'INCOME' => array(
            'rule-1' => array(
                'rule' => 'notEmpty',
                'message' => 'Bitte die Bezahlung angeben'
            ),
            'rule-2' => array(
                'rule'    => '/^[a-z0-9_äÄöÖüÜß§$%&*\/\d\w\s?!\.:,\'"\(\)=\+-]{1,}$/i',
                'message' => 'Hacker kommen hier nicht weit!'
            )
        ),*/
        'INCOMETYPE' => array(
            'rule' => 'notEmpty',
            'required' => 'true',
            'message' => 'Bitte die Art der Bezahlung festlegen'
        ),
        'VEHICLE' => array(
            'rule-1' => array(
                'rule' => 'notEmpty',
                'message' => 'Bitte das Fahrzeug angeben'
            ),
            'rule-2' => array(
                'rule'    => '/^[a-z0-9_äÄöÖüÜß§$%&*\/\d\w\s?!\.:,\'"\(\)=\+-]{1,}$/i',
                'message' => 'Hacker kommen hier nicht weit!'
            )
        ),
        'DELIVERYAREA' => array(
           'rule-1' => array(
                'rule' => array('postal', null, 'de'),
                'message' => 'Bitte eine gültige Postleitzahl eingeben.',
                'last' => true
            ),
            'rule-2' => array(
                'rule' => array('ZipExists'),
                'message' => 'Postleitzahl existiert nicht!'  
            )
        ),
        'SPACE' => array(
            'rule-1' => array(
                'rule' => 'notEmpty',
                'message' => 'Bitte den verfügbaren Platz angeben'
            ),
            'rule-2' => array(
                'rule'    => '/^[a-z0-9_äÄöÖüÜß§$%&*\/\d\w\s?!\.:,\'"\(\)=\+-]{1,}$/i',
                'message' => 'Hacker kommen hier nicht weit!'
            )
        ),
        'TEL' => array(
            'rule-1' => array(
                'rule' => 'notEmpty',
                'message' => 'Bitte die Telefonnummer eingeben'
            ),
            'rule-2' => array(
                'rule'    => '/^[0-9_\/\d\w\s?!\.:,\'"\(\)=\+-]{0,}$/i',
                'message' => 'Hacker kommen hier nicht weit!'
            )
        ),
        'NAME' => array(
            'rule'    => '/^[a-z0-9_äÄöÖüÜß§$%&*\/\d\w\s?!\.:,\'"\(\)=\+-]{0,}$/i',
            'message' => 'Hacker kommen hier nicht weit!'
        ),
        'LATITUDE' => array(
            'rule-1' => array(
                    'rule' => 'notEmpty',
                    'message' => 'Bitte gültige Adresse angeben'
                ),
            'rule-2' => array(
                    'rule'    => 'numeric',
                    'message' => 'Bitte gültige Adresse angeben'
                )
        ),
        'LONGITUDE' => array(
            'rule-1' => array(
                    'rule' => 'notEmpty',
                    'message' => 'Bitte gültige Adresse angeben'
                ),
            'rule-2' => array(
                    'rule'    => 'numeric',
                    'message' => 'Bitte gültige Adresse angeben'
                )
        ),
        'TYPE' => array(
            'rule-1' => array(
                    'rule' => 'numeric'
                ),
            'rule-2' => array(
                    'rule'    => array('maxLength', 1)
                )
        )   
    );

    public function ZipExists($zipcode){
        $value = array_values($zipcode);
        $value = $value[0];
        $Zipcode = ClassRegistry::init('Zipcode');
        $valid = $Zipcode->find('count', array('conditions'=> array('Zipcode.zipcode' =>$value)));
        if ($valid >= 1){
          return true;
        }
        else{
          return false;
        }
    }
};
EN

回答 1

Stack Overflow用户

发布于 2014-08-07 10:22:26

如果我对你的理解是正确的,那你就错了。

蛋糕将验证验证规则中的所有内容,并且是必需的。请记住,忽略一个字段可能本身就是一个验证错误。

编辑:验证工作在模型的上下文中,而不是请求。它根据验证规则验证将保存到数据库的数据。

意思是:它将将POST数据与规则进行比较。

而且,如果一个字段在验证规则中是required,它将抛出一个错误。

请附上验证错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25179731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档