助けてください。投稿全体と投稿の下にコメントを追加するための小さなフォームがある投稿ページがあります。投稿ページの uri は site/posts/1 なので、投稿コントローラーにあり、フォーム アクションはform_open(site_url('comments/add/'.$post->post_id))
です。
これは、コメント コントローラー内の私の 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); の場合です。検証に失敗して投稿ビューに検証エラーが表示されます。それ以外の場合は、コメントを挿入して同じ投稿ページ (site/posts/1) にリダイレクトします。
問題は、フォームの送信を押したときに、期待どおりにコメント/追加/1にアクションが入ることですが、上記のことは何もしません。
どうすればこれを修正できますか??
編集 私は、「紛らわしい」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;
}