【问题标题】:Codeigniter form_open() load View file twice when passing variable from Controller to View将变量从控制器传递到视图时,Codeigniter form_open() 加载视图文件两次
【发布时间】:2019-12-26 06:39:53
【问题描述】:

我的控制器类似于

public function create_room($id_1, $id_2) {
        $data['id_1'] = $id_1;
        $data['id_2'] = $id_2;
        $data['query']  = $this->model->get_all();
        $this->load->view('viewFilePath', $data);

        $this->form_validation->set_rules // set the rules

        if ($this->form_validation->run() === FALSE) {
            $this->load->view('viewFilePath');
            $this->session->set_flashdata('error', "errorMessage");
        } else { (do the query)

}

我的观点

<?php echo form_open('theURL'.$id_1.'/'.$id_2.'/URLEnding');?>

视图加载了两次,很可能是因为我在两个文件中加载了一次视图。

基本上我想:

  • 将 $id_1 和 $id_2 从打开 URL 传递给 Controller 函数作为参数;
  • 在 Controller 中使用 $id_1 和 $id_2 查询;
  • 将查询数据传递给 View。

有没有办法在不加载视图两次的情况下实现这一点?

更新:我已经尝试过这些:

  • 从 create_room() 中移除 load->view(没有 $data 从视图传递到控制器)

【问题讨论】:

  • 您通过 $this->load->view('viewFilePath', $data) 加载了两次视图。从 form_validation->run() 条件中删除此代码。
  • @RahatHameed 我确实尝试过,但视图没有运行,因为我需要使用 $data 来填充视图中的表,并且没有 $data 从控制器传递到视图。我看到我在原帖中没有提到,会更新,不过谢谢你的回复。
  • "theURL" 由一个控制器和一个函数(除了参数)组成,对吧?所以你需要做的就是把表单验证放在那里。

标签: php codeigniter


【解决方案1】:

您可以创建另一个函数存储并将以下代码移动到新函数。因为此代码将在您提交表单时运行。并在表单打开中使用存储功能而不是创建表单

$this->form_validation->set_rules // set the rules

    if ($this->form_validation->run() === FALSE) {
        $this->load->view('viewFilePath');
        $this->session->set_flashdata('error', "errorMessage");
    } else { (etc)

【讨论】:

  • 谢谢,不过与上面的其他类似解决方案相同。
【解决方案2】:

请更改您的代码,因为两次查看调用,所以如果您删除一个调用而另一个调用将您的第二个调用移到 else 部分。

            $data['id_2'] = $id_2;
            $data['query']  = $this->model->get_all();


            $this->form_validation->set_rules // set the rules

            if ($this->form_validation->run() === FALSE) {
                $this->load->view('viewFilePath');
                $this->session->set_flashdata('error', "errorMessage");
            } else { 
             $this->load->view('viewFilePath', $data);
             (etc)

【讨论】:

  • 谢谢,但这不起作用,因为我必须使用 $data['query'] 在视图中填充表格。
猜你喜欢
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
相关资源
最近更新 更多