Поиск лучшего способа передачи данных между представлением модели и контроллером

Я очень новый программист, поэтому, пожалуйста, простите меня, если мой вопрос покажется вам глупым. Я работаю с 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 часов. Заранее большое спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
52
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

$result = $mymodel->get_projects(useridgohere)

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

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

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

Затем вы можете вызвать с помощью:

<?php 
   echo $thenameofvariableinview; 
?>

Добавьте свой вид php, и я смогу вам помочь!

Jordi Castillo 07.03.2019 21:55

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

Rishav 08.03.2019 06:41

Просто получите доступ к массиву, например $result['name']

Jordi Castillo 08.03.2019 08:11
Ответ принят как подходящий

Во-первых, убедитесь, сколько строк вы извлекаете.

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(), иначе без цикла.

У меня есть дата начала и другие данные, хранящиеся в базе данных. Как только я возвращаю результат () из модели, как мне получить доступ ко всем деталям в контроллере, а также в представлении. Пожалуйста, уточните, я делаю это впервые.

Rishav 08.03.2019 06:34

@ Ришав, согласно моему ответу, в контроллере вы получаете запись проекта из БД в переменной $projects. Затем вы передаете это в виде другого массива $data. В контроллере вы можете использовать данные проектов с переменной $projects. На ваш взгляд, вы можете получить доступ к данным проектов с именем переменной $projectname.

Danish Ali 08.03.2019 06:43

мне нужно получить доступ только к некоторым атрибутам всего набора результатов.

Rishav 08.03.2019 06:47

см. в контроллере $data = array('имя проекта' => $projects->имя проекта, 'дата начала'-> $projects->дата начала) ; . Могу ли я сделать что-то вроде этого.

Rishav 08.03.2019 06:51

Нет нет. Делай так $data = array('projectname' => $projetcs, 'startdate' => 'other-value') ;

Danish Ali 08.03.2019 06:59

см., что у меня есть все данные в массиве результатов. я хочу показать все данные в поле зрения. поэтому я должен пройти от контроллера. пожалуйста, покажите мне, как прочитать дату начала из базы данных в модели, передать ее контроллеру, а затем просмотреть. Извините, если мое понимание ограничено. Пожалуйста, потерпите меня.

Rishav 08.03.2019 07:04

Еще одна просьба, если у вас есть 5 минут времени, я хотел бы подключиться на любом столе, пожалуйста.

Rishav 08.03.2019 07:06

startdate находится в таблице projects?

Danish Ali 08.03.2019 07:22

вам не нужно передавать его отдельно, вы можете получить его из переменной $projects.

Danish Ali 08.03.2019 07:26

На вид $projectname->startdate;

Danish Ali 08.03.2019 07:36

Это решило все. Спасибо, сэр, за вашу помощь. Желаю тебе всего наилучшего в жизни. Спасибо большое.

Rishav 08.03.2019 07:44

Модель:

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>

Другие вопросы по теме