CakePHP控制器中的add方法不起作用

时间:2013-12-16 13:51:33

标签: cakephp add cakephp-2.4

当我尝试包含新内容时,在此控制器中,他没有运行保存选项并返回错误消息,因为我使用了print_r函数来检查$ this->请求 - >数据,并传递正确的参数。下面是代码:

控制器/ CanvasController.php:

class CanvasController extends AppController {
    public $name = 'Canvas';
    function beforeFilter() {
        parent::beforeFilter();
        //$this -> layout = 'dialog';
        $this -> layout = 'default-original';
    }

    public function index() {
        $this -> set('Canvas', $this -> Canvas -> find('all'));
    }

    public function add() {
        if ($this -> request -> is('post')) {
            if ($this -> Canvas -> save($this -> request -> data)) {
                $this -> Session -> setFlash(__('The Canvas has been saved'));
                $this -> redirect(array('action' => 'index'));
            } else {
                $this -> Session -> setFlash(__('The Canvas could not be saved. Please, try again.'));
            }
        }
    }

    public function edit($id = null) {
        $this -> Canvas -> id = $id;
        if ($this -> request -> is('get')) {
            $this -> request -> data = $this -> Canvas -> read();
        } else if ($this -> Canvas -> save($this -> request -> data)) {
            $this -> Session -> setFlash('Canvas updated.');
            $this -> redirect(array('controller' => 'user', 'action' => 'index'));
        }
    }

    public function delete($id = null) {
        if (!$this -> request -> is('post')) {
            throw new MethodNotAllowedException();
        }
        $this -> Canvas -> id = $id;
        if (!$this -> Canvas -> exists()) {
            throw new NotFoundException(__('Invalid.'));
        }
        if ($this -> Canvas -> delete($id)) {
            $this -> Session -> setFlash('The Canvas with id: ' . $id . ' has been deleted.');
            $this -> redirect(array('controller' => 'user', 'action' => 'index'));
        }
        $this -> Session -> setFlash(__('Canvas was deleted.'));
        $this -> redirect(array('controller' => 'user', 'action' => 'index'));
    }
}

型号/ Canvas.php:

class Canvas extends AppModel {
    public $name = 'Canvas';

    public $hasAndBelongsToMany = array(
        'users' => array(
            'classname' => 'Users',
            'foreignkey' => 'canvas_id',
            'joinTable' => 'canvas_has_users'
        )
    );

    public $hasMany = array(
        'CanvasContents' => array(
            'classname' => 'CanvasContents',
            'foreignKey' => 'canvas_id'
        )
    );

    public $validate = array(
        'name' => array(
            'required' => array(
                'rule' => array(
                    'notEmpty'
                ),
                'message' => 'A name is required'
            )
        )
    );
}

查看/帆布/ add.ctp:

<?php echo $this -> Form -> create('Canvas'); ?>
<fieldset>
    <?php   echo $this -> Form -> input('name'); ?>
    <?php   echo $this -> Form -> input('description'); ?>
</fieldset>
<?php   echo $this -> Form -> end('Submit');?>

SQL代码:

CREATE TABLE IF NOT EXISTS `sistema`.`canvas` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(45) NOT NULL,
    `description` TEXT NULL,
    PRIMARY KEY (`id`))
    ENGINE = InnoDB

3 个答案:

答案 0 :(得分:2)

我不完全确定您的代码有什么问题。但是,作为开始,您应该尝试以下方法:

public function add() {
    if ($this -> request -> is('post')) {
        $this->Canvas->create(); // **** ADD This missing call ****
        if ($this -> Canvas -> save($this -> request -> data)) {
            $this -> Session -> setFlash(__('The Canvas has been saved'));
            $this -> redirect(array('action' => 'index'));
        } else {
            $this -> Session -> setFlash(__('The Canvas could not be saved. Please, try again.'));
        }
    }
}

答案 1 :(得分:0)

通过添加$this->Canvas->create();来尝试它,如果你还有问题那么问题可能在表中..也检查你的dataabase表..

答案 2 :(得分:0)

我解决了,这是代码:

控制器/ CavasController.php:

<?php
class CanvasController extends AppController {
    public $name = 'Canvas';

    function beforeFilter() {
        parent::beforeFilter();
        $this -> layout = 'dialog';
        $this -> Auth -> allow();
        //$this -> layout = 'default-original';
    }

    public function index() {
        $this -> set('Canvas', $this -> Canvas -> find('all'));
    }

    public function setActiveCanvas($canvasId) {
        $this -> Session -> write('activeCanvas', $canvasId);
    }

    public function add() {
        if ($this -> request -> is('post')) {
            $this -> Canvas -> create();
            if ($this -> Canvas -> save($this -> request -> data)) {
                $this -> Session -> setFlash(__('The Canvas has been saved'));
                $this -> redirect('/');
            } else {

                $this -> Session -> setFlash(__('The Canvas could not be saved. Please, try again.'));
            }
        }
    }

    public function edit($id = null) {
        $this -> Canvas -> id = $id;
        if ($this -> request -> is('get')) {
            $this -> request -> data = $this -> Canvas -> read();
        } else if ($this -> Canvas -> save($this -> request -> data)) {
            $this -> Session -> setFlash('Canvas updated.');
            $this -> redirect('/');
        }
    }

    public function delete($id = null) {
        if (!$this -> request -> is('post')) {
            throw new MethodNotAllowedException();
        }

        $this -> Canvas -> id = $id;

        if (!$this -> Canvas -> exists()) {
            throw new NotFoundException(__('Invalid.'));
        }

        if ($this -> Canvas -> delete($id)) {
            $this -> Session -> setFlash('The Canvas with id: ' . $id . ' has been deleted.');
            $this -> redirect(array('controller' => 'user', 'action' => 'index'));
        }

        $this -> Session -> setFlash(__('Canvas was deleted.'));
        $this -> redirect(array('controller' => 'user', 'action' => 'index'));
    }

}
?>

型号/ Canvas.php:

<?php
class Canvas extends AppModel {
    public $name = 'Canvas';

    public $hasMany = array(
        'CanvasContents' => array(
            'classname' => 'CanvasContents', 
            'foreignKey' => 'canvas_id'
        )
    );

    public $belongsTo = array(
        'Star' => array(
            'className'     => 'Stars',
            'foreignKey'    => 'stars_id'
        ),
        'User' => array(
            'className'     => 'Users',
            'foreignKey'    => 'users_id'
        ),
        'UserRole' => array(
            'className'     => 'UserRoles',
            'foreignkey'    => 'user_roles_id'
        )
    );

    public $validate = array(
        'name' => array(
            'required' => array(
                'rule' => array(
                    'notEmpty'
                ),
                'message' => 'A name is required'
            )
        )
    );
}
?>

查看/帆布/ add.ctp:

<?php echo $this -> Form -> create('Canvas',array('action'=>'add')); ?>
<fieldset>
    <?php   echo $this -> Form -> input('Canvas.name'); ?>
    <?php   echo $this -> Form -> input('Canvas.description'); ?>
</fieldset>
<?php   echo $this -> Form -> end(); ?>

MySQL的:

CREATE TABLE IF NOT EXISTS `sistema`.`canvas` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL,
  `description` TEXT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB