2010-12-05 39 views
2

ビューにコントローラ内にある関数を呼び出すことはできますか?CodeIgniter - ビューの内部から関数を呼び出す

これは私のビュー内で、私は

if(checkKeyExists($row->id, $role->key)){ 
} 

を次している次に例として

function checkKeyExists($userid, $key){ 
} 

、私は私のコントローラを持っているものです。しかし、私はそれを実行すると、checkKeyExistsではないと言います定義された。

誰かが私にこれをどうやってできるか教えてもらえれば、それは素晴らしいことでしょう。

+2

まだ1年以上経過していて、まだ答えを受け入れていません... –

答えて

12

ビューはコントローラアクションを呼び出すためのものではありません。 ロジックを逆にし、コントローラでその関数を呼び出し、ビューに送信した変数に設定します。次に、ifステートメントにその変数をビューテンプレートでチェックさせることができます。

それはあなたのために動作しない場合は、多分ヘルパーは何が必要です:http://ellislab.com/codeigniter/user-guide/general/helpers.html

+0

ビュー内にあるコードもforeachループ内にあり、変数を動的に取得します。だから私はページがレンダリングされているときにそれを実行することはできません...これは私がそれをヘルパーにしなければならないという意味ですか?ヘルパーからモデルを呼び出すことができます – Chris

+0

なぜヘルパーからモデルを呼びたいのですか?あなたのビューからモデルを呼び出すことができ、あなたのモデルでcheckKeyExists()メソッドを持つことができますが、これはお勧めしません。 – Shivaas

+0

annoyingly正しい答え –

2

あなたのコントローラは、ビューへのデータのセットを渡す必要があります。

ビューは、何かが設定されているかどうかをテストし、それに応じて動作します。次に、あなたのビューで

$this->data['my_setting']='value'; 
$this->load->vars($this->data); 
$this->load->view('your_view'); 

は:

if(isset($my_setting)){ 
    do something with my_setting 
} 
5

Widoxは、私はヘルパーが出て最善の方法だと思い、言ったように。このような 何か:

<?php // test_helper.php 
if(!defined('BASEPATH')) exit('No direct script access allowed'); 

function checkKeyExists($userid, $key, $table) 
{ 
    $CI =& get_instance(); 

    $query = $CI->db->query("SELECT $keyFROM $table WHERE id = $userid LIMIT 1"); 
    if($query->num_rows() > 0) 
    { 
     return true; 
    }else 
    { 
     return false; 
    } 
} 

?> 

は、その後、あなたが自由に自分の意見に使用することができますが、同じようにあなたのそれぞれのコントローラにロード:の$ this - >ロード - >ヘルパー(「テスト」);.

あなたがこの方法ビュー内の関数を宣言することができます
1

$myfunction = function_that_do_something() { 
} 

// then call as you want 
$myfunction(); 

唯一のことは、あなたが関数から変数をアクセスもできないことである - 単に>

0

この方法では、滑らかな関数に渡します。

@controller method 
$obj = array(); 
$obj['fnc'] = function(){ return 'hello'; }; 
$this->load->view('your_path', $obj); 

@view 
echo $fnc(); 
+0

関数はコントローラスコープ外ですので、$ thisの代わりに$ CI =&get_instance()を使用してください –

0

コントローラー:

public function xyz(){ 
    $data['controller'] = $this; 
    $this->load->view('your_view_file',$data); 
} 

ビュー:

$controller->xyz(); 
0

ビューからコントローラ機能を呼び出すには、良いアイデアではありません。それはMVCの役割とは対照的です。しかし、Model関数をビューから呼び出すことができます。この質問に関するその他の回答は有効ですhere

関連する問題