Я хочу передать $data
из контроллера с именем poll
в results_view
однако я получаю неопределенную переменную ошибку.
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Poll extends CI_Controller { public function __construct() { parent::__construct(); $this->load->database(); $this->load->helper('form'); } public function index() { $this->load->view('poll_view',$data); } public function vote() { echo "Voting Successfull"; $this->db->insert('votes',$_POST); } public function results() { echo "These are the results"; //$query = $this->db->get('votes'); $data = "hello"; $this->load->view('results_view', $data); } }
Results_view.php
<html> <?php echo $data; ?> </html>
$data
должен быть массивом или объектом: http://codeigniter.com/user_guide/general/views.html
$data = array( 'title' => 'My Title', 'heading' => 'My Heading', 'message' => 'My Message' ); $this->load->view('results_view', $data);
results_view.php
<html> <?php //Access them like so echo $title.$heading.$message; ?> </html>
Проще говоря,
$ data ['a'] в контроллере становится $ a в вашем представлении. ($ data не будет отображаться в вашем представлении, будет доступен только индекс)
например
Controller: $data['hello']='hellow world'; view: echo $hello;
Представление не будет вызывать данные данных '
Контроллер будет включать ассоциативный индекс (не уверен, что это правильная номенклатура) для данных, например «материал», выглядящий таким образом $data['stuff']
Вы бы echo
в представлении так: echo $stuff;
не echo $data;
Я скудный скрипач кода, но действительно люблю CodeIgniter, поэтому извините меня, если у меня есть эта задница о синице.
Еще одна вещь – безусловно, ваша функция конструктора – это немного отходов. Вся загрузка библиотек и помощников выполняется с файлом автозагрузки.
Вам просто нужно создать массив, вы правильно используете codeigniter?
Пример для контроллера:
$data['hello'] = "Hello, world"; $this->load->view('results_view', $data);
На странице «results_view» вам просто нужно:
<?php echo $hello;?>
Obs: Вы можете создать n datas, просто обратите внимание на имя и сделайте массив.
Obs²: для использования данных используйте ключ массива с эхом.
В вашем контроллере вы можете пройти
$data['poll'] = "Your results";
По вашему мнению, вы можете позвонить
echo $poll;
Хорошо, поэтому я, наконец, решил. У вас действительно должна быть модель (она очень помогает)
в вашей модели сделайте что-то вроде
Модель
class poll_model extends CI_MODEL { function __construct() { $this-load->database(); } function get_poll { $this->db->query("SELECT * FROM table"); $row = $query->row(); $obj = array( 'id' => $row->id ); returb $obj; } }
Теперь, если у вас больше, чем id, укажите имя опроса #, которое вы можете добавить в массив. Теперь в вашем контроллере
class Poll extends CI_Controller { public function __construct() { parent::__construct(); $this->load->database(); $this->load->helper('form'); $this->load->model('poll_model'); } public function index() { $data["a"] = $this->poll_model->get_poll(); $this->load->view('poll_view',$data); }
И, наконец, в VIEW
<? echo $a["id"]; ?>
Это большая помощь. Я понял это путем тестирования, и это работает для меня.
Я видел все ответы выше, поэтому вот что я делаю, когда мне приходится загружать данные с контроллера на мое представление. Передача данных К представлению с контроллера:
public function your_controller(){ // Your Necessary Code // You have the $data, $data2, $data3 to post to the view. $this->load->view('your_view_directory or view_page',['data'=>$data, 'data2'=>$data2, 'data3'=>$data3... so on ]); }
И на стороне просмотра Вы можете просто получить эти данные: для отображения Вы можете просто использовать echo
, print
, print_r
. И если вы хотите перебрать его, вы также можете это сделать.
В контроллере:
$data["result"] = $this->login_model->get_login(); // Get array value from DB.. $this->load->view('login-form',$data); // Pass the array to view
Ввиду:
print_r($result); // print the array in view file
вы можете сделать это так: $ data ['hello'] = "hello";
in echo $ hello;