Как я могу получить доступ к значению переменной в представлении из контроллера - PullRequest
0 голосов
/ 02 июля 2019

У меня есть две пары вида контроллера.Я загружаю представление из моего A_Controller с переменной $ data.В новом представлении (B_View) с новым контроллером (B_Controller) я могу получить доступ к этим данным, но я бы также хотел использовать их в контроллере представления (B_Controller).Есть ли какой-либо доступ к нему?

A_Controller

class A_Controller extends CI_Controller {
   public function index{
      $variable= "some_data";
      $data['variable'] = $variable
      $this->load->view('B_View', $data)
   }
}

B_View

<html>
   <body>
      <!-- I can access it here -->
      <h1><?php echo $variable;?><h1>
   </body>
</html>

B_Controller

class B_Controller extends CI_Controller {
   public function some_function{
      $new_variable = $variable; //but I can't access it here :( 
   }
}

Ответы [ 4 ]

2 голосов
/ 02 июля 2019

Использование СЕССИИ

  1. Включение глобальных сеансов в config / autoload.php
$autoload['libraries'] = array('session'); 
В A_Controller инициализируйте вашу переменную и сохраните ее в сеансе
class A_Controller extends CI_Controller {
   public function index{
      $variable= "some_data";
      $this->session->set_userdata(array('variable'=>$variable)); //store variable in a session
      $data['variable'] = $variable;
      $this->load->view('B_View', $data)
   }
}
В B_Controller получить переменную через сеанс
class B_Controller extends CI_Controller {
   public function some_function{
      $new_variable = $this->session->userdata('variable'); //get back variable from session
   }
}

Надеюсь, это поможет:)

1 голос
/ 03 июля 2019

Если вы пытаетесь передать конфиденциальные данные, такие как номер мобильного телефона или что-то личное, я не согласен использовать сеанс для передачи данных через функции контроллера.Если у вас много переменных и если они выбирают данные из базы данных, лучше создать отдельный контроллер для загрузки необходимых данных в функцию.Но имейте в виду, не загружайте любое представление в этой функции.Просто загрузите необходимые данные.Если ваша функция извлечения данных имеет много переменных, это может повлиять на скорость загрузки вашего сайта.Однако, когда у вас есть отдельная функция и контроллер для загрузки данных, вы можете перенаправить на этот контроллер другие функции и затем получить доступ к требуемой переменной.

 class B_Controller extends CI_Controller {

   public function some_function{
        redirect('/Data_Controller/data_function');
         $new_variable = $variable; 
     }
   }

Надеюсь, это имеет смысл для вашей проблемы.Спасибо

1 голос
/ 02 июля 2019

Почему вы не делаете $data['variable'] = "SOME DATA" в контроллере, вы сможете использовать его в виде, как <?= $variable; ?>:)

1 голос
/ 02 июля 2019

Вы можете использовать Codeigniter Session для передачи данных с одного контроллера на другой контроллер или перенаправить контроллер с именем контроллера и методом

   class B_Controller extends CI_Controller {

   public function some_function{
        redirect('/A_Controller/index');
         $new_variable = $variable; 
     }
   }

Через сеанс

Сначала установите переменную $ во флэш-данные

class A_Controller extends CI_Controller {
   public function index{
      $this->load->library('session');
      $variable= "some_data";
      $data['variable'] = $variable;

      $this->session->set_flashdata('variableName', $variable);

      $this->load->view('B_View', $data)

   }
}

Теперь попробуйте установить ее во втором контроллере

 class B_Controller extends CI_Controller {
   public function some_function{

      $new_variable = $this->session->flashdata('variableName');

      $new_variable = $variable;  
   }
}

Обратите внимание, я не проверял этот код, но я думаю, что вы можете получить что-то с помощьюthis.Thanks

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...