web-dev-qa-db-ja.com

CodeIgniterで変数をコントローラーからビューに渡す

私はCodeigniterが初めてで、OOP PHP。

コントローラ:

public function index(){
    $this->load->model('main_model');
    $planet = $this->main_model->solar();
    $this->load->view('main_view', $planet);    
    }

echo $planetコントローラーで、想定されていることを行います。もし私が echo $planetビューで未定義変数エラーが発生します。 $planetは配列ではありません。なぜ$planet変数がビューに渡されていますか?

私はこれが簡単で基本的な質問であることを知っています。

編集:さて、いじくり回した後、私はそれが動作するようになりました。変数が配列としてフォーマットされている場合にのみ、コントローラーからビューに変数を渡すことができますか?

16
user1616244

ビューに配列を渡す必要があります。 CodeIgniterは自動的に$planetを利用可能にします。

$data = array('planet' => $planet);
$this->load->view('main_view', $data);

これにより、ビューで$planetを使用できます。

たとえば、次のことを行う場合:

$data = array('foo' => 'Hello', 'bar' => 'world');
$this->load->view('main_view', $data);

$fooおよび$barがビューで使用可能になります。配列内のキーと値のペアは、ビュー内の変数に自動的に変換されます。

27
Mischa

arrayまたはobjectのいずれかをビューに渡すことができます。その後、ビュー内の変数として配列キーにアクセスできます。

コントローラ

配列

public function index()
{
    $this->load->model('main_model');
    $planet_data['planet'] = $this->main_model->solar();
    $this->load->view('main_view', $planet_data);
}

オブジェクト

public function index()
{
    $this->load->model('main_model');
    $planet_data = new stdClass(); //Creates a new empty object
    $planet_data->planet = $this->main_model->solar();
    $this->load->view('main_view', $planet_data);
}

From CodeIgniterのユーザーマニュアル注:オブジェクトを使用する場合、クラス変数は配列要素に変換されます。

見る

データを渡す方法に関係なく、次のように表示できます。

<?php echo $planet; ?>

配列の場合は、繰り返し処理する必要があります。または、オブジェクト、そのメンバー変数にアクセスします。


私の経験では、配列の使用はオブジェクトの使用よりも一般的です。

12
jleft

これは簡単にそれを行う方法です

public function index() {
    $this->load->model('main_model');
    $data['planet'] = $this->main_model->solar();
    $this->load->view('main_view', $data);    
}

ビューでこの方法で値にアクセスできます

echo $planet;
6
walecloud

のように試してください:

public function index(){
    $this->load->model('main_model');
    $data['planet'] = $this->main_model->solar();
    $this->load->view('main_view', $data);    
}

そしてあなたの意見では、「$ planet」にアクセスできます。

1
Gautam3164

モーダルに配列応答が含まれる場合:

public function solar() {
   $data['earth'] = 'Earth';
   $data['venus'] = 'Venus';
   return $data;
}

次に、データを次のように表示します。

public function index(){
    $this->load->model('main_model');
    $planet = $this->main_model->solar();
    $this->load->view('main_view', $planet);    
}

しかし、ビューでは、次のようなデータにアクセスできます。

echo $earth;
echo $venus;

応答が必要かどうかわからない場合は、次のようなコードを使用します。

public function index(){
    $this->load->model('main_model');
    $planet['planet'] = $this->main_model->solar();
    $this->load->view('main_view', $planet);    
}

ビューファイルでは、次のようにデータにアクセスできます。

print_r($planet);

どのデータが表示されるかわからない場合は、ビューでこのコードを使用してください:

print_r($this->_ci_cached_vars);
1
Gaurav

あなたはにURLの変数を渡すことができます

function regresion($value) {

    $data['value'] = $value;
    $this -> load -> view('cms/template', $data);
}

ビューで

<?php print_r($value);?>

ビューで配列を渡すと、配列のキーが自動的に変数になり、codeigniterによって使用可能になります。配列に渡す必要があるビューに変数を渡すことはできません

以下はあなたのコードです

public function index(){
  $this->load->model('main_model');
  $planet = $this->main_model->solar(); // <--- Change this line 
  $this->load->view('main_view', $planet);    
}

単にそれを変更する

public function index(){
  $this->load->model('main_model');
  $data['planet']= $this->main_model->solar(); // <--- to this
  $this->load->view('main_view', $data);    
}

あなたのビューでは、このように簡単にアクセスできます

echo $planet;
0
Ali Haider