![](/img/trans.png)
[英]Don't repopulate with redirect and flashdata doesn't work with $this->method CodeIgniter
[英]CodeIgniter “flashdata” doesn't work
我使用CodeIgniter 2.1.0,我希望在數據庫中插入數據后得到一條消息,如“您的信息已成功更新。”。 對於這項工作,我在CI_Controller中有以下功能:
function myCiInser(){
... Here is my query ...
//$data: this var is result query that is true
if($data){
$this -> session -> set_flashdata('message', 'Your information was successfully updated.');
redirect('url/myurl');
}
}
我認為:
<?php
$message = $this->session->flashdata('message');
if($message){
echo '<div id="error_text">' . $message . '</div>';
}
//I test this : "echo $message;" but don't give output
?>
但我不會在視圖中給出消息,但redirect
已完成且工作正常。 並在表ci_sessions
列user_data
數據庫中我有這個:
a:2:{s:9:“user_data”; s:0:“”; s:19:“flash:new:message”; s:42:“您的信息已成功更新。”;}
怎么解決這個問題?
更新:
我有以下錯誤(我使用chorme並通過Ctrl + Shift + ji獲取此警報):
無法加載資源:服務器響應狀態為404(未找到)
我修復它(現在我沒有錯誤)但在顯示消息中仍然是同樣的問題。 我該怎么辦?
從Codeigniter 會話類文檔中 ,關於Flashdata,我們可以閱讀:
CodeIgniter支持“flashdata”或僅可用於下一個服務器請求的會話數據,然后自動清除。
您的問題可能是,當您重定向時,該過程需要多個請求,清除您的flashdata。
要查看是否是這種情況,只需將以下代碼添加到要重定向到的控制器的構造函數中:
$this->session->keep_flashdata('message');
這將使flashdata保留另一個服務器請求,允許它在之后使用。
我也有這個問題。 我不記得我在哪里看到了,但這是我的解決方案。
redirect('url/myurl','refresh');
CodeIgniter沒有將重定向視為另一個請求。 所以flashdata沒有設置在重定向中,但它是在我加載的下一頁上。
//在我們的控制器文件中設置flash數據
$this->session->set_flashdata('sessionkey', 'Value');
//之后我們需要使用重定向功能
redirect("admin/signup");
//在視圖上獲取Flash數據
$this->session->flashdata('sessionkey');
使用數據庫會話有時會引起我的問題。 我建議設置$config['sess_use_database'] = FALSE;
在config.php中 ,看看flashdata是否正常工作。
您還可以使用數據庫進行會話,但必須設置配置項:
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = FALSE;
以這種方式,會話flashdata將再次工作
除了一頁,我能夠使用session顯示/傳遞值。 我嘗試使用var_dump($this->session)
,我得到:
["flash:old:Array"]=> bool(false)
["flash:new:message"]=> string(10) "My Message"
我嘗試在頁面內回顯閃存數據,而不是在設置數據后重定向,但結果是一樣的。 我建議減少代碼,並嘗試在其他頁面中設置會話。 如果問題仍然存在,請檢查var_dump
。 這可能不是解決方案,但我認為它可以提供幫助。
更新 :修剪文本中的空格和換行符。 我傳遞了兩個長句子,空行和空格。
if (0) //Assume this condition is false
{
$this->load->view('error_page');
// Generate validation error
}
else
{
//Show success message
$data = array(
'message' => 'My message'
);
$this->session->set_flashdata($data);
$this->session->keep_flashdata($data);
echo $this->session->flashdata('message');
//echo var_dump($this->session);
//redirect(base_url().'success_page');
}
我有同樣的問題。 檢查完我發現的代碼后,我調用$this->session->sess_destroy();
,這會導致問題。
404(未找到)計為1個服務器請求。 它會刪除你的flashdata。
正如我觀察codeigniter flashdata。 當我在使用codeigniter redirect()方法的第二個請求中使用它時,它在mozila中工作正常,但在chrome的情況下它不起作用。
我知道我已經很晚了,但我遇到了這個問題,我無法相信在我的情況下,解決方案非常簡單
只是替換
$this->session->flashdata('message');
至
print_r($this->session->flashdata('message'));
我打開Chrome開發者控制台並刪除了flashdata。 關閉它並重試它的工作原理。 版本71.0.3578.98(官方版)(64位)
我將它用於閃存數據並且易於使用。 首先,需要你有創建會話,然后在你的控制器的方法中使用它之前你想要重定向你的頁面。
創建會話后在Controller上,不要忘記加載會話和URL庫。
$this->session->set_flashdata('success', 'Oops. This email id already exist.' );
redirect("You Mehod or page");
在這種情況下,您無需轉到特定的視圖頁面來添加額外的PHP代碼。
並且在footer.php上查看過去的腳本代碼
<!-- Code for flashdata toaster -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/css/toastr.min.css">
<script type="text/javascript">
<?php if($this->session->flashdata('success')){ ?>
toastr.success("<?php echo $this->session->flashdata('success'); ?>");
<?php }else if($this->session->flashdata('error')){ ?>
toastr.error("<?php echo $this->session->flashdata('error'); ?>");
<?php }else if($this->session->flashdata('warning')){ ?>
toastr.warning("<?php echo $this->session->flashdata('warning'); ?>");
<?php }else if($this->session->flashdata('info')){ ?>
toastr.info("<?php echo $this->session->flashdata('info'); ?>");
<?php } ?>
</script>
<!-- End of flashdata script -->
祝你好運,希望它對你的問題有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.