我是这样理解CakePHP验证的:只有请求中的字段(例如,“Post”和“Post”)在appmodel中得到验证,即使在appmodel中还有更多字段的声明。
现在我称之为->Post->save($this->request->data),Cake为请求中的字段抛出验证错误,而现在我不知道该做什么。
主计长:
调试此->请求->数据:
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->:
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'
)
)主计长:
带有调试语句的代码:
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的请求,编辑,验证规则:
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;
}
}
};发布于 2014-08-07 10:22:26
如果我对你的理解是正确的,那你就错了。
蛋糕将验证验证规则中的所有内容,并且是必需的。请记住,忽略一个字段可能本身就是一个验证错误。
编辑:验证工作在模型的上下文中,而不是请求。它根据验证规则验证将保存到数据库的数据。
意思是:它将将POST数据与规则进行比较。
而且,如果一个字段在验证规则中是required,它将抛出一个错误。
请附上验证错误。
https://stackoverflow.com/questions/25179731
复制相似问题