2010-12-05 46 views
2

是否可以從視圖中調用位於控制器中的函數?CodeIgniter - 從視圖中調用函數

這就是我在我的控制,作爲一個例子

function checkKeyExists($userid, $key){ 
} 

然後我的觀點裏,我有以下

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

但是當我運行它,它說,checkKeyExists不定義。

如果有人能讓我知道我該如何做到這一點,那就太棒了。

+2

超過一年過去了,你仍然沒有接受答案...... – 2012-08-16 01:13:41

回答

12

視圖並不意味着調用控制器操作。 顛倒你的邏輯,在控制器中調用該函數,並將其設置爲發送給視圖的變量。然後你可以讓if語句在你的視圖模板中檢查這個變量。

如果不爲你工作,也許一個幫手是你所需要的:http://ellislab.com/codeigniter/user-guide/general/helpers.html

+0

視圖內的代碼也在foreach循環中,並且動態獲取變量,所以我不能在頁面呈現時運行它...這是否意味着我必須讓它成爲幫手?並且你可以從助手調用模型 – Chris 2010-12-05 04:12:11

+0

爲什麼你想從助手調用模型?您可以從視圖中調用模型,並在模型中使用checkKeyExists()方法,但不建議這樣做。 – Shivaas 2010-12-09 07:19:29

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

控制器:

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

查看:

$controller->xyz(); 
0

從調用視圖控制器的功能是不是一個好主意。它違背了MVC的角色。但是你可以從視圖中調用Model函數。關於這個問題的更多答案是vailable here

相關問題