保存记录后重定向条件

时间:2010-10-30 12:46:08

标签: cakephp controller

我有一个用户控制器,如果我根据用户在创建帐户时选择的用户类型添加我想要重定向的用户

情况:

用户表

ID

名称

usertype_id

用户添加表单有一个用户类型的选择框,我有两种类型的用户:教师和学生(每个表,模型,控制器),如果用户选择教师我想重定向到/ teachers / add / $ id如果用户选择我想重定向到的学生:/ students / add / $ id

这就是我所拥有的,但这显然不起作用

<?php
class UsersController extends AppController {
    var $name = 'Users';

    function add() {
    if (!empty($this->data)) {
        $this->User->create();
        if ($this->User->save($this->data)) {
            $id = $this->User->id;
            if ($this->User->usertype_id=='1')
            {
                $this->redirect(array('students/add/'.$id));
            } elseif ($this->User->usertype_id=='2') {
                $this->redirect(array('teachers/add/'.$id));
            } else {
                $this->Session->setFlash(__('The user could not be saved. Please, try again.', true));
            }
        } else {
            $this->Session->setFlash(__('The user could not be saved. Please, try again.', true));
        }
    }
    $usertypes = $this->User->Usertype->find('list');
    $this->set(compact('usertypes'));
}

}
?>

1 个答案:

答案 0 :(得分:2)

我很确定问题是假设,因为$this->User->id存在,$this->User->usertype_id也必须存在,但它不存在。我第一次开始使用CakePHP时遇到了这个问题。 :)

如果用户类型是通过添加表单传递的,则需要检查数据数组:

更改

if ($this->User->usertype_id=='1')

if ($this->data['User']['usertype_id'] == '1')

如果这不起作用(我不记得在成功保存后是否清空了$this->data)那么你应该在保存之前存储该值,如下所示:

function add() {
    if (!empty($this->data)) {
        $usertype_id = $this->data['User']['usertype_id'];
        $this->User->create();
        if ($this->User->save($this->data)) {
            $id = $this->User->id;
            if ($usertype_id == '1') {
                $this->redirect(array('students/add/'.$id));
            } elseif ($usertype_id == '2') {
                // the rest remains the same

<强>附录
而不是在重定向中使用连接,这对我来说看起来更干净:

$this->redirect(array('controller' => 'teachers', 'action' => 'add', $id));

但我猜这只是偏好。

附录2
我有一些关于清理控制器和将所有逻辑移动到模型的额外建议。这样,您可以在将来重用其他控制器的代码,并且您的当前控制器将更易于阅读。我会将整个方法更改为:

// this is in /controllers/users_controller.php
function add() {
    if (!empty($this->data)) {
        $saved_user = $this->User->save_user($this->data);
        if ($saved_user['success']) {
            $this->redirect(array(
                'controller' => $saved_user['controller'],
                'action' => 'add',
                $this->User->id
            ));
        }
    }
    $this->Session->setFlash(__('The user could not be saved. Please, try again.', true));
    $usertypes = $this->User->Usertype->find('list');
    $this->set(compact('usertypes'));
}

// this is in your model, /models/user.php
function save_user($data) {
    $this->create;
    $usertype_id = $data['User']['usertype_id'];
    return array(
        'controller' => ($usertype_id == '2') ? 'teachers': 'students';
        'success' => $this->save($data),
    );
}