在codeigniter中的控制器中调用方法

时间:2014-07-02 10:10:51

标签: php codeigniter

我需要在传递参数时从标签中调用控制器中的方法,这里是代码。当我点击链接时我需要在模型中调用该函数,

**controller**
public function company_details($id){
        $this->load->view('view_header');
        $this->load->view('view_nav');
        $this->load->model('company_detail_model');
        $data['company_result'] = $this->load->company_detail_model->getRecords();
        $this->load->view('company_details',$data);
        $this->load->view('view_footer');
    }

模型

class Company_detail_model extends CI_Model{

    function getRecords()
    {
        $this->load->database();
        $q = $this->db->get("companydetails");
        if($q->num_rows() > 0)
        {
            return $q->result();
        }
        return array();
    }


}

查看

<label for="folder1"><a href="<?php echo site_url('site2/company_details'.$row->id); ?>"><?=$row->name?></label></a>

我需要以这样的文本输入形式显示这些数据,

<?php echo form_open_multipart('site/upload');?>
    <label>Code : </label> <?php echo form_input('code');?><br/><br/>
    <label>Name : </label> <?php echo form_input('name');?><br/><br/>
    <label>Logo : </label><input type="file" name="userfile"/><br/><br/>
    <label>URL : </label> <?php echo form_input('url');?><br/><br/>
    <label>Description : </label> <textarea name="description" rows="4" cols="50"></textarea><br/><br/>
    <input type="submit" name="submit" value="Save"/>
    </form>

4 个答案:

答案 0 :(得分:2)

您需要学习 Codeigniter 的基础知识。

尝试以下代码

**controller**
public function company_details($id){
    $this->load->view('view_header');
    $this->load->view('view_nav');
    $this->load->model('company_detail_model');
    $data['company_result'] =$this->company_detail_model->getRecords();
    $this->load->view('company_details',$data);
    $this->load->view('view_footer');
}

您需要将$this->load->company_detail_model->getRecords();更改为$this->company_detail_model->getRecords();

编辑:

您的模型功能如下所示:

function getRecords()
{
    $this->load->database();
    $query = $this->db->get("companydetails");
    return $query->result_array();
}

result_array()方法以数组形式重新生成结果。

答案 1 :(得分:1)

在模型调用加载后(不再加载)修复模型调用:

$data['company_result'] = $this->company_detail_model->getRecords();

修复锚链接(你错过了斜杠)和HTML结构(嵌套错误):

<label for="folder1">
    <a href="<?php echo site_url('site2/company_details/'.$row->id); ?>">
        <?=$row->name?>
    </a>
</label>

这并没有破坏任何东西,但通常在控制器方法调用结束时加载视图。理想情况下,该方法应如下所示:

public function company_details($id){
    $this->load->model('company_detail_model');        
    $data['company_result'] = $this->company_detail_model->getRecords();

    $this->load->view('view_header');
    $this->load->view('view_nav');
    $this->load->view('company_details',$data);
    $this->load->view('view_footer');
}

您的模型方法也可以针对以下内容进行优化:

function getRecords()
{
    $this->load->database();
    return $this->db->get("companydetails")->result();
}

最后,对数据库等常见内容使用自动加载可能是个好主意。

答案 2 :(得分:0)

调用模型方法

时无需添加load

请更改

$this->load->company_detail_model->getRecords();

$this->company_detail_model->getRecords();

在模型中,使用$this->load->library加载database

 function getRecords()
    {
        $this->load->library("database");
        $q = $this->db->get("companydetails");
        if($q->num_rows() > 0)
        {
            return $q->result();
        }
        return array();
    }

答案 3 :(得分:-1)

所以,如果你想这样做,

在你的控制器中

public function company_details($id){
    //load model
    $this->load->model('company_detail_model');

    //get back your data
    $data['company_result'] = $this->company_detail_model->getRecords();

    $this->load->view('view_header');
    $this->load->view('view_nav');
    $this->load->view('company_details',$data);
    $this->load->view('view_footer');
}

在你的模特中:

class Company_detail_model extends CI_Model{

    public function __construct(){
      parent::__construct();
      $this->load->database();
    }


    public function getRecords()
    {
        $query = $this->db->get("companydetails");
        return $query->result();
    }
}

在你看来

<!-- we check if $company_result is not empty instead of control in model -->
<php? if($company_result!= FALSE): ?>
    <label for="folder1">
          <!--+ 
              |note, we read the value id from $company_result because you pass this
              |varible in your controller with $data['company_result']
              +-->
          <a href="<?php echo site_url('site2/company_details'.$company_result->id); ?>">
              <?=$company_result->name?>
          </a>
    </label>
<?php endif; ?>

如果您想使用参数获取特定页面 你必须在你的控制器或其他方法 添加一个控件,如:

    public function company_details($id = null){
        //load model
        $this->load->model('company_detail_model');

        $this->load->view('view_header');
        $this->load->view('view_nav');

        if($id != null && is_numeric($id)){
            //get back your specific data in another wiew
            //make your custom method
            $data['company_result'] = $this->company_detail_model->getRecordsByID($id);
            //load your specific view             
            $this->load->view('company_details_wiew',$data);
        }else{
         //get back your data
         $data['company_result'] = $this->company_detail_model->getRecords();            
         $this->load->view('company_details',$data);       
        }

        $this->load->view('view_footer');
    }

和模型

public function getRecordsByID($id)
    {
        $this->db->where("id",$id);
        $query = $this->db->get("companydetails");
        return $query->result();
    }

我希望它可以帮助你:)。