我在启动codeigniter项目时遇到问题,问题是当我在控制器中执行某些操作然后我想要一个页面来显示结果时,一个示例:我有一个表单将数据添加到数据库中,我得到了控制器中的所有数据并将其保存到数据库然后我想(如果一切顺利)重定向到主页与成功的消息,我正在这样做
$this->load->view('admin', $data);
问题是url一直说admin / addItem所以每次刷新页面时都会添加另一个项目,现在我找到了:
redirect('admin','refresh');
但这只会帮助我,因为我不需要显示任何消息,因为此函数不允许发送$ data var。 有任何想法吗? 可能这很容易修复,但我找不到按照我想要的方式处理应用程序流的方法,任何帮助都是相关的。 谢谢;)
答案 0 :(得分:3)
Flashdata是你的朋友,请点击该链接,在页面的中途,您会找到flashdata的文档。
基本上,如果您的表单功能成功,您可以使用成功消息$this->session->set_flashdata('success', 'You successfully did something, yay!');
设置flashdata
现在重定向到您的管理页面。管理页面上的redirect('admin','refresh');
检查现有的flashdata并将其回显给用户
答案 1 :(得分:1)
可能很容易修复,也可能很难修复, 查看有关uri routing http://codeigniter.com/user_guide/general/routing.html
的文档在我的测试应用中,我使用此变量
$route['default_controller'] = "main";
$route['scaffolding_trigger'] = "";
main是一个控制器,所以如果你访问你的网站,它首先会调用控制器主
在你的情况下,我会使用这样的东西
$route['admin/:num'] = "catalog/products";
这会将对admin / *的任何访问权限重定向到目录/产品
有创意; - )
答案 2 :(得分:0)
我认为你应该使用这个方法:
而不是调用管理视图或重定向标题,你应该将表单中的帖子直接发送到admin函数,如果$ _POST变量不为空则表示你应该在数据库调用中保存数据同一个控制器或一个模型示例中的其他函数:($ this-> save_data_in_database();)并再次将结果发送到视图。 如果$ _POST变量为空,则应调用admin视图并将消息数据作为NULL发送。
我发送一个例子:
查看管理员:(直接发布到控制器中的管理员功能)
<html>
(...)
<body>
<?php echo $message_response; ?>
<form method="post" action="<domain>/index.php/admin" />
<imput (...)
</form>
</html>
<强>控制器:强>
function admin()
{
if (isset($_POST['fieldname']))
$data['message_response']=$this->save_data_in_database($params...);
else
$data['message_response']=NULL;
$this->load->view('admin', $data);
}
function save_data_in_database($params...)
{
(save data to database etc...)
return (...message_to_display...);
}
最诚挚的问候,
佩德罗