如果没有传递表单数据,如何获取CodeIgniter表单验证以验证$_SESSION
?我尝试手动设置$_REQUEST
变量,但似乎无效。
即。我在控制器中有一个函数search
,它验证传递的表单输入,并返回上一页有错误,或者让你进入下一页。但是如果您之前填写了此页面,我希望此功能也能正常工作,并且信息存储在$_SESSION
变量中。
function search () {
$this->load->library("form_validation");
$this->form_validation->set_rules("flightID", "Flight Time", "required|callback_validFlightID");
$this->form_validation->set_rules("time", "Flight Time", "required|callback_validFlightTime");
$this->setRequest(array("flightID", "time"));
// adding session check allows for inter-view navigation
if ($this->form_validation->run()) {
// some application logic here
$this->load->view("seats", $data);
} else {
$this->logger->log($_REQUEST, "request");
// redirect back to index
$this->index();
}
}
function setRequest () {
// make sure none of the parameters are set in the request
foreach ($vars as $k) {
if (isset($_REQUEST[$k])) {
return;
}
}
foreach ($vars as $k) {
if (isset($_SESSION[$k])) {
$_REQUEST[$k] = $_SESSION[$k];
}
}
}
答案 0 :(得分:1)
您可以使用以下codeigniter函数
将表单发布信息存储在会话中$formdata = array(
'flightID' => $this->input->post('flightID'),
'time' => $this->input->post('time')
);
$this->session->set_userdata($formdata);
可以使用以下
检索信息$this->session->userdata('flightID')
$this->session->userdata('time')
答案 1 :(得分:0)
form_validation
直接与$_POST
一起使用,因此请使用该代替$_REQUEST
。
答案 2 :(得分:0)
您要做的是手动设置Post值,这不是本机的 CodeIgniter支持。所以我们首先要做的是扩展核心。 创建一个新文件(MY_Input.php)并将以下内容粘贴到其中:
class MY_Input extends CI_Input{
function set_post($key, $value)
{
$_POST[$key] = $value;
}
}
这是你目的的一个非常基本的实现,但它足以测试。您可能希望扩展它以使其符合您的需求(例如,允许输入数组)。
所以现在。在您的控制器中,您可以检查用户是否发布了某些内容。如果不是,您将只使用Input类的新方法手动设置post变量。
class Some_Controller extends CI_Controller{
public function index()
{
// The user hasn't filled out a field?
if(!$this->input->post('a_key'))
{
// Let's set the postfield to the value of a session key
$this->input->set_post('a_key', $this->session->userdata('mystoredkey'));
}
}
}
手动设置postfield后,表单验证库可以按原样处理。
那应该是你要走的路:) 如果你不害怕破解核心,你真的可以做一些漂亮的事情。很多人都是,不要成为其中之一!
快乐编码