CodeIgniter中的视图无法访问Controller方法的结果

时间:2017-04-06 04:35:08

标签: codeigniter

我正在尝试在视图上打印控制器方法的结果,但它给了我一个错误: 未定义的变量:$ states。有人可以帮我指出我的代码中有什么问题吗?

型号代码:

public function state_names() {
    $query =  $this->db->select('name')
                    ->get('place')
                    ->where('parent','India');
    $query->db->get();
    return $query->result();
}

控制器代码:

public function state_names() {
    $st['states'] = $this->place_model->state_names();
    if ($this->form_validation->run('resource_signup') == TRUE) {
        if (isset($st['states']) && $st['states']->num_rows() > 0) {
            $this->load->view('/web/resource_signup',$st);
        }   
    }
    return array();
}

查看代码:

<?php foreach ($states as $state) {
  echo $state->name;
}

3 个答案:

答案 0 :(得分:1)

在模型中,您运行查询两次 - 对于每个方法get()。你应该运行一次:

public function state_names() {
    $query =  $this->db->select('name')
                    ->where('parent','India')
                    ->get('place');
    return $query->result();
}

在您的控制器中,您无法检查 num_rows(),因为有结果 - 而不是数据库的完整响应。

public function state_names() {
    $st['states'] = $this->place_model->state_names();
    if ($this->form_validation->run('resource_signup') == TRUE) {
        if (isset($st['states'])) {
            $this->load->view('/web/resource_signup',$st);
        }   
    }
    return array();
}

答案 1 :(得分:1)

尝试这个

public void showMessage(final String message,final Context mContext) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.setMessage(message)
                    .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                        }
                    })
                    .setCancelable(false) // cancel with button only
                    .show();
        }
    });
}

答案 2 :(得分:0)

你的问题在模型中是第2位,在控制器中是第2位

  

if(isset($ st ['states'])&amp;&amp; $ st ['states'] - &gt; num_rows()&gt; 0)

     

和模型

  1. 模型解决方案

    public function state_names() { $query = $this->db->select('name') ->where('parent','India') ->get('place'); // $query->db->get(); if($query->num_rows() > 0){ return $query->result(); } }

  2. N.B [这里将是第一个,并将获得最后的良好做法];

    控制器解决方案:

    public function state_names() {
        $st['states'] = $this->place_model->state_names();
    
        if ($this->form_validation->run('resource_signup') == TRUE) {
            if (isset($st['states']) ) {
                $this->load->view('/web/resource_signup',$st);
            }   
        }
        return array();
    }`