【问题标题】:How to handle redirections with codeigniter?如何使用 codeigniter 处理重定向?
【发布时间】:2011-01-29 15:25:08
【问题描述】:

我在启动 codeigniter 项目时遇到问题,问题是当我在控制器中执行某些操作然后我想要一个页面来显示结果时,例如:我有一个表单可以将项目添加到数据库中,我得到控制器中的所有数据并将其保存到数据库,然后我希望(如果一切顺利)通过成功消息重定向到主页,我正在这样做

$this->load->view('admin', $data);

问题是 url 一直说 admin/addItem 所以每次刷新页面时它都会添加另一个项目,现在我找到了:

redirect('admin','refresh');

但这仅在我不需要显示任何消息时对我有帮助,因为此功能不允许发送 $data var。 有任何想法吗? 可能这真的很容易解决,但我无法找到一种方法来按照我想要的方式处理应用程序的流程,任何帮助都是不胜感激的。 谢谢;)

【问题讨论】:

  • 这 3 个答案有效,我从 dyllon 中选择了一个,只是因为我喜欢它:P 谢谢大家,很好的答案;D

标签: php codeigniter redirect url


【解决方案1】:

可能很容易修复,也可能很难修复, 查看有关uri路由http://codeigniter.com/user_guide/general/routing.html的文档

在我的测试应用中,我使用这个变量

$route['default_controller'] = "main";
$route['scaffolding_trigger'] = "";

main 是一个控制器,所以如果您访问您的站点,它首先会调用控制器 main

在你的情况下,我会使用这样的东西

$route['admin/:num'] = "catalog/products"; 

这会将任何对 admin/* 的访问重定向到目录/产品

要有创意;-)

【讨论】:

    【解决方案2】:

    Flashdata 是您的朋友,点击该链接,在页面进行到一半时您会找到 flashdata 的文档。

    基本上,如果您的表单功能成功,您可以使用成功消息设置 flashdata,$this->session->set_flashdata('success', 'You successfully did something, yay!'); 现在重定向到您的管理页面。 redirect('admin','refresh'); 在您的管理页面上检查现有的 flashdata 并将其回显给用户

    【讨论】:

    • 哦,这看起来像我需要的,我会检查它;D
    【解决方案3】:

    我认为你应该改用这种方法:

    而不是调用管理视图或重定向标题,您应该将表单中的帖子直接发送到管理函数,如果 $_POST 变量不为空,则在管理函数内部意味着您应该将数据保存在数据库调用中同一控制器或一个模型示例中的其他函数:($this->save_data_in_database();) 并将其结果再次发送到视图。 如果 $_POST 变量为空,您应该调用管理视图并将消息数据作为 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...);
    
    }
    

    最好的问候,
    佩德罗

    【讨论】:

    • 这看起来也不错,现在我正在尝试使用 flashdata 的东西,如果它不能像我想要的那样工作,我会试试这个,ty ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2010-10-17
    • 2014-07-20
    • 2018-06-13
    • 2019-02-16
    • 1970-01-01
    相关资源
    最近更新 更多