Хотелось бы помочь. У меня есть страница с полным сообщением, а ниже - небольшая форма для добавления комментариев. Ури страницы сообщения: site/posts/1, поэтому он находится в контроллере сообщений, а действие формы - form_open(site_url('comments/add/'.$post->post_id))
.CodeIgniter - добавление комментариев к сообщению
Это моя функция Add() внутри комментарии контроллера:
public function add($post_id){
// if nothing posted redirect
if (!$this->input->post()) {
redirect(site_url());
}
// TODO: save comment in database
$result = $this->comment_model->add($post_id);
if ($result !== false) {
redirect('posts/'.$post_id);
}
// TODO:load the view if required
}
и это функция Add() внутри комментария модель
public function add($post_id){
$post_data = array(
'post_id' => $post_id,
'username' => $this->input->post('username'),
'email' => $this->input->post('email'),
'comment' => $this->input->post('comment')
);
if ($this->validate($post_data)) {
$this->db->insert('comments', $post_data);
if ($this->db->affected_rows()) {
return $this->db->insert_id();
}
return false;
} else {
return false;
}
}
То, что я пытаюсь сделать это, если $ result = $ this-> comment_model-> add ($ post_id); не дает подтверждения для проверки ошибок проверки в моем представлении сообщения, иначе вставьте комментарий и перенаправьте на ту же страницу (сайт/сообщения/1).
Проблема в том, что когда я нажимаю submit, действие формы идет в комментариях/добавлении/1, как и ожидалось, но не делает ничего подобного выше.
Любые идеи, как я могу исправить это?
EDIT Я сделал небольшое изменение кода без «запутывающей» функции validate(). Может быть, это более полезно.
Комментарий Контроллер:
public function add($post_id){
// if nothing posted redirect
if (!$this->input->post()) {
redirect(site_url());
}
// TODO: save comment in database
$this->form_validation->set_rules($this->comment_model->rules);
if ($this->form_validation->run() == true) {
echo "Ok! TODO save the comment.";
// $this->comment_model->add($post_id);
// redirect('posts/'.$post_id);
} else {
echo "Validation Failed! TODO: show validation errors!";
}
// TODO:load the view if required
}
комментарий модель:
public function add($post_id){
$post_data = array(
'post_id' => $post_id,
'username' => $this->input->post('username'),
'email' => $this->input->post('email'),
'comment' => $this->input->post('comment')
);
$this->db->insert('comments', $post_data);
if ($this->db->affected_rows()) {
return $this->db->insert_id();
}
return false;
}
где ваша 'функция validate()'? –
Да, эта функция выполняет проверку. Он находится внутри MY_Model. Смотрите: https://github.com/jamierumbelow/codeigniter-base-model/blob/master/core/MY_Model.php – Lykos
Когда вы отправляете форму, она заходила в 'if ($ this-> form_validation-> run() == true) {...} 'statement? – anvoz