如何从控制器访问视图中的变量值

时间:2019-07-02 12:57:19

标签: php codeigniter

我有两个控制器视图对。我从A_Controller加载带有$ data变量的视图。在带有新控制器(B_Controller)的新视图(B_View)中,我可以访问该数据,但是我也想在视图的控制器(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 个答案:

答案 0 :(得分:2)

使用会议

  1. 在config / autoload.php中全局启用会话
$autoload['libraries'] = array('session'); 
  1. 在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)
   }
}
  1. 在B_Controller中,通过会话获取变量
class B_Controller extends CI_Controller {
   public function some_function{
      $new_variable = $this->session->userdata('variable'); //get back variable from session
   }
}

希望它会有所帮助:)

答案 1 :(得分:1)

您可以使用codeigniter会话将数据从一个控制器传递到另一个控制器,或使用控制器名称和方法重定向控制器

   class B_Controller extends CI_Controller {

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

通过会话

首先将$ variable设置为Flash数据

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;  
   }
}

请注意,我尚未测试此代码,但我认为您可能可以通过此方法获取一些东西。谢谢

答案 2 :(得分:1)

  

为什么不在控制器中执行$data['variable'] = "SOME DATA",您将能够在<?= $variable; ?>之类的视图中使用它:)

答案 3 :(得分:1)

如果您尝试传递敏感数据(例如手机号码或个人信息),则我不接受使用会话在控制器功能之间传递数据。如果您有很多变量,并且它们从数据库中获取数据,则最好使用单独的控制器将所需数据加载到函数中。但是请记住不要在此函数中加载任何视图。只需加载所需的数据。如果您的数据获取功能具有很多变量,则可能会影响您的网站加载速度。但是,当您具有单独的功能和要加载数据的控制器时,可以在其他功能中重定向到该控制器,然后访问所需的变量。

 class B_Controller extends CI_Controller {

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

希望这对您的问题有意义。谢谢