我正在学习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