これは機能します: ($this->Task->save('active', '0')
これはしません: ($this->Task->save('active', '1')
モデルの検証に失敗します: Model->Task
'active' => array(
'boolean' => array(
'rule' => array('boolean'),
),
),
TaskController.php
これは機能します:
public function deactivate ($id = null) {
$this->Task->id = $id;
if (!$this->Task->exists()) {
throw new NotFoundException(__('Invalid task'));
}
$this->request->onlyAllow('post');
if ($this->Task->save('active', '0')) {
$this->Session->setFlash(__('The task has been saved'));
$this->redirect($this->referer());
} else {
$this->Session->setFlash(__('The task could not be saved. Please, try again.'));
}
これはしません:
public function activate ($id = null) {
$this->Task->id = $id;
if (!$this->Task->exists()) {
throw new NotFoundException(__('Invalid task'));
}
$this->request->onlyAllow('post');
if ($this->Task->save('active', 1)) {
$this->Session->setFlash(__('The task has been saved'));
$this->redirect($this->referer());
} else {
$this->Session->setFlash(__('The task could not be saved. Please, try again.'));
$this->redirect($this->referer());
}
}
View/Tasks/index.ctp からの呼び出しは次のとおりです。
<?php
if ($task['Task']['active'] == 1){
echo $this->Form->postLink(__('Deactivate'), array('action' => 'deactivate', $task['Task']['id']),null, __('Are you sure you want to return # %s to the project?', $task['Task']['id']));
} else {
echo $this->Form->postLink(__('Activate'), array('action' => 'activate', $task['Task']['id']),null, __('Are you sure you want to send # %s to your todo list?', $task['Task']['id']));
}
?>
mysql db: フィールド 'active' はタイプ "tinyint" です。
また、Views/Tasks/edit.ctp で Bake によって生成されたチェックボックス フォーム コントロールは問題なく動作します。
私も次のことを試しました:
($this->Task->save('active', 1)
($this->Task->save('active', true)
($this->Task->save('active', 'true')
($this->Task->save('active', '2')
これ:
($this->Task->save('active', `1`) //notice the tic marks
検証をバイパスしているように見えますが、データベースは更新されません。