В поисках лучшего способа передачи данных между представлением модели и контроллером - PullRequest
0 голосов
/ 07 марта 2019

Я очень новый программист, поэтому, пожалуйста, прости меня, если ты посчитал мой вопрос глупым.Я работаю с Codeigniter, и у меня есть метод get_projects() в модели проектов для чтения данных из таблицы проектов.вот код.

public function get_projects ($userid = '')
{
    if (empty($userid))
    {
        return FALSE;
    }
     $return_data = array();
        $this->db->select('id, startdate, projectname, expenddate, amount, advance, dues');
        $this->db->where('userid', $userid);
        $query = $this->db->get('projects');
        if($query->row())
            $return_data = $query->row();
        return $return_data;                  
}

У меня есть функция контроллера get_projects(), в которой я пытаюсь вызвать этот метод модели и передать данные в файл просмотра.Вот код.

 public function get_projects()
{
    $userid = $this->session->userdata('user_id');
    $projects = $this->projects->get_projects($userid);
    $data = array(
        'projectname' => '',
        'startdate'   => ''            
    );
    $this->load->view('dashboard', $data);
}

У меня есть файл вида с именем dashboard.php, и я хочу показать его там.Я обновляю свой вопрос, чтобы показать файл представления.

    <?php defined('BASEPATH') OR exit('No direct script access allowed');?>
<section>
    <div class="row topspace">
        <div class="col-6 offset-3">
            <h4 class="text-center">Dashboard Testing</h4><hr>
        </div>
    </div>
    <div class="row">
    <?php foreach ($result as $row) { ?>  
            <div class="col-12">
                <div class="card" style="width: 18rem;">
                  <div class="card-body">
                    <h5 class="card-title"><?php echo $row->projectname; ?></h5>
                    <h6 class="card-subtitle mb-2 text-muted"><?php echo $row->startdate; ?></h6>
                    <a href="#" class="card-link">Card link</a>
                    <a href="#" class="card-link">Another link</a>
                  </div>
                </div>
            </div>
    <?php } ?>
    </div>
</section>

Как мне это сделать?Как правильно отправить данные из контроллера для просмотра файла и как правильно получить доступ к этим данным в файле просмотра?Пожалуйста, помогите мне понять, что я пытался за последние 5 часов.Заранее большое спасибо.

Ответы [ 3 ]

1 голос
/ 08 марта 2019

Сначала убедитесь, сколько строк вы выбираете.

row() для одной записи и result() для более чем одной

Модель

 public function get_projects ($userid = '')
 {
   if (empty($userid)){
     return FALSE;
   }
   $this->db->select('id, startdate, projectname, expenddate, amount, advance, dues');
   $this->db->where('userid', $userid);
   $query = $this->db->get('projects');

   //Another way is to count rows and then use row() or result()
   //$query->num_rows() will tell you how many rows you are getting

   if($query->num_rows() == 1){
        return $query->row();
    }else{
        return $query->result();
    }                  
 }

Контроллер

 public function get_projects(){

   $userid = $this->session->userdata('user_id');
   $projects = $this->projects->get_projects($userid);

   //Here pass `$projects` data to array and give it to view
   $data = array(
        'projectname' => $projects, 
        'startdate'   => 'your-date'
   );
   $this->load->view('dashboard', $data);
}

Теперь показывать данные в представлении. Если строк больше одного, используйте цикл foreach(), в противном случае без цикла

1 голос
/ 07 марта 2019

Вы должны сначала загрузить свою модель:

$mymodel = $this->load->model('namemodel')

Затем доступ к функции вашей модели:

$result = $mymodel->get_projects(useridgohere)

И у вас есть результат в $result var.

Для чтения вы можете поместить в свои переменные данные свой результат

$data = array(
   'thenameofvariableinview' => $result,
);
$this->load->view('dashboard', $data);

Тогда в поле зрения вы можете позвонить с помощью:

<?php 
   echo $thenameofvariableinview; 
?>
0 голосов
/ 08 марта 2019

Модель:

public function get_projects ($userid = '')
 {
   if (!empty($userid))
   {
      $this->db->select('id, startdate, projectname, expenddate, amount, advance, dues');
      $this->db->where('userid', $userid);
      $query = $this->db->get('projects');
      if($query->num_rows() > 0){
          return $query->row();
          //return $query->result();//according to your requirment like loop
      }else{
          return array();//empty array
      }
    }else{
       return array();//empty array
    }              
 }

Контроллер:

public function get_projects(){

   $data = array()
   $this->load->model('Project_model');//assums not loaded in autoload
   $userid = $this->session->userdata('user_id');
   $results = $this->Project_model->get_projects($userid);//always add _model to avoid confusion

   //$results->startdate = '';//you can do this too
   $data['result'] = $results;
   $data['startdate'] = '';//dont forget to add date
   $this->load->view('dashboard', $data);
}

Вид:

<?php defined('BASEPATH') OR exit('No direct script access allowed');?>
<section>
    <div class="row topspace">
        <div class="col-6 offset-3">
            <h4 class="text-center">Dashboard Testing</h4><hr>
        </div>
    </div>
    <div class="row">
    <?php if (!empty($result) { ?>
    <?php foreach ($result as $row) { ?>  
            <div class="col-12">
                <div class="card" style="width: 18rem;">
                  <div class="card-body">
                    <h5 class="card-title"><?php echo $row->projectname; ?></h5>
                    <h6 class="card-subtitle mb-2 text-muted"><?php echo $startdate; ?></h6>
                    <a href="#" class="card-link">Card link</a>
                    <a href="#" class="card-link">Another link</a>
                  </div>
                </div>
            </div>
    <?php } ?>
    <?php }else{ ?>
          <div class="col-12">
                <div class="card" style="width: 18rem;">
                  <div class="card-body">
                    <h5 class="card-title">No data found.</h5>
                  </div>
                </div>
          </div>
    <?php } ?>
    </div>
</section>
...