我正在學習Codeigniter 2併成功使用their Tutorial/Example about how to create a basic news application。使用刪除功能修改標準Codeigniter 2新聞教程
所以在獲得這個工作之後,我想嘗試添加一個「刪除記錄」鏈接到新聞項目,看看我是否可以自己弄清楚。
我將此添加到我的模式文件,news_model.php
:
public function delete_news($id) {
$this->db->delete('news', array('id' => $id));
}
我將此添加到我的控制器文件,news.php
:
public function delete($id) {
$this->news_model->delete_news($id);
$data['news'] = $this->news_model->get_news();
$data['title'] = 'News item deleted';
$this->load->view('templates/header', $data);
$this->load->view('news/index', $data);
$this->load->view('templates/footer');
}
我將此添加到我的意見文件,index.php
:
<a href="/news/delete/<?php echo $news_item['id'] ?>">Delete Item</a>
最後,我已將此添加到我的配置文件,routes.php
$route['news/delete/(:any)'] = 'news/delete/$1';
這似乎是工作的寫入。
從新聞列表網頁在/news/
,我點擊的鏈接新聞項目上,當頁面重新加載,相應的項目已經一去不復返了。
問題:
1)頁面重新加載後,該URL顯示/news/delete/id
,其中/id
是項目編號。但是,我不想要這個新網址,我真的只想要重新加載/news/
頁面以顯示新內容。顯然,我這樣做的方式是潛在的危險,因爲用戶簡單的頁面刷新會刪除另一個項目。修復/處理這個問題的標準方法是什麼?
2)在我的控制器delete()
功能,第一行後,我基本上只是從控制器index()
函數重複相同的5行代碼。毫無疑問,這與問題#1有關,但是再一次,有什麼更好的方法來做到這一點?
3)我錯過了有關「標準」或「最佳實踐」的內容嗎?
就像一個筆記:我會有一個確認鏈接,所以這篇文章只在POST上被刪除。這樣,文章不會僅僅通過點擊一個URL而被刪除。 –
@MartinBean,我完全同意。只是玩弄教程,但隨時發佈一個答案,幷包括你的建議改進。 – Sparky