我发现了非常奇怪的行为"如果" codeigniter中的条件和会话flashdata,
public function edit_equip($equip_id, $company_id) {
$this->data['section_title'] = 'Edit Equipment';
$this->data['equip_detail'] = $equip_detail = $this->common->select_data_by_id('equipment', 'id', $equip_id, '*', array());
if (empty($equip_detail)) {
$this->session->set_flashdata('error', 'Error Ouccrred. Try Again!');
redirect('Company/equipment/' . $company_id, 'refresh');
}
//some other code
$this->load->view('company/edit_equip', $this->data);
}
这是我的Equipment类的功能。现在,当我打电话给下面的网址时, http://localhost/scale/Equipment/edit_equip/1/2
然后编辑视图将正确打开。但现在当我按F5按钮或浏览器刷新按钮时,它显示"错误Ouccrred。再试一次!"如果条件,我在上面设置的flash消息。我不明白为什么会发生这种情况,因为$ equip_detail包含数据而且我也试图在其中死亡但是如果哪个是正确的则不会进入,所以为什么只有$this->session->set_flashdata('error', 'Error Ouccrred. Try Again!');
提供效果?
总之我的代码没有运行if block但是如果我在第一次加载视图后按F5或浏览器刷新按钮它会显示错误消息,如果条件设置,但是我的代码不会转到它它必须重定向,但它正在加载带有flash消息的视图页面。
我只按照上面的代码在一个地方设置了此flash消息。我正在使用codeigniter 3.1.6
请有人能解释一下吗?
答案 0 :(得分:1)
答案 1 :(得分:1)
这不是解决方案,而是更多的调查来满足自己的工作方式......
因此,当事情变得“棘手”时,它总是回归基础的好时机。因此,看到你确信你的代码正确执行但是给你意想不到的结果这里是一些测试代码,只是为了检查flashdata的行为。
<强> Flash_session_test.php 强>
class Flash_session_test extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->library('session');
$this->load->helper('url');
}
public function index()
{
echo "This is " . __METHOD__;
$this->test_display();
}
/**
* Mockup code derived from sample code
* to test the behavior of the flash data.
*
* @param $equip_id
*/
public function edit_equip($equip_id)
{
echo "This is " . __METHOD__;
// Set up our Fail / Pass for the If statement below.
if (isset($equip_id)) {
if ($equip_id == 'fail') {
// Create a Fail Condition
$equip_detail = null;
} else {
// Create a Pass Condition
$equip_detail = array('fred' => 1);
}
}
// The code we are testing.
if (empty($equip_detail)) {
$this->session->set_flashdata('error', 'Error Occurred. Try Again!');
// Redirect and display the flashdata error message
redirect('/flash_session_test', 'refresh');
}
$this->test_display();
}
/**
* Our Test "View" put here for simplicity
*/
public function test_display()
{
echo '<br>';
echo '<a href="/flash_session_test/edit_equip/pass" >Click here to Create a PASS</a>';
echo '<br>';
echo '<a href="/flash_session_test/edit_equip/fail" >Click here to Create an ERROR</a>';
echo '<br>';
echo '<br>';
// Only display the message if we have one
$error = $this->session->flashdata('error');
if ($error === null) { // If null, then It doesn't exist
echo '<div style="color:green">';
echo "Not An Error in Sight!";
echo '</div>';
} else {
echo '<div style="color:red">';
echo $this->session->flashdata('error');
echo '</div>';
echo "Now Refresh the page!";
}
}
}
注意:这将独立运行,而不依赖于您现有的代码。
答案 2 :(得分:0)
不要使用 $this->session->set_flashdata(),而是使用 $this->session->mark_as_flash(),它对我有用!