Я почти уверен, что проблема заключается в предположении, что, поскольку $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),
);
}