2

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

控制器/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
4

3 回答 3

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.'));
        }
    }
}
于 2013-12-16T15:12:13.410 回答
0

如果您仍然有问题,请尝试添加 $this->Canvas->create();,那么问题可能出在表中.. 还要检查您的数据库表..

于 2013-12-21T05:59:06.907 回答
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
于 2014-01-07T18:22:52.230 回答