CodeIgniter-从视图内部调用函数

CodeIgniter-从视图内部调用函数,codeigniter,Codeigniter,是否可以从视图调用位于控制器中的函数 这就是我的控制器中的示例 function checkKeyExists($userid, $key){ } 在我看来,我有以下几点 if(checkKeyExists($row->id, $role->key)){ } 但是当我运行它时,它说checkKeyExists没有定义 如果有人能告诉我如何做到这一点,那就太好了。视图并不意味着调用控制器操作。 反转逻辑,在控制器中调用该函数,并将其设置为发送到视图的变量。然后可以让if语句在视图模

是否可以从视图调用位于控制器中的函数

这就是我的控制器中的示例

function checkKeyExists($userid, $key){
}
在我看来,我有以下几点

if(checkKeyExists($row->id, $role->key)){
}
但是当我运行它时,它说checkKeyExists没有定义


如果有人能告诉我如何做到这一点,那就太好了。

视图并不意味着调用控制器操作。 反转逻辑,在控制器中调用该函数,并将其设置为发送到视图的变量。然后可以让if语句在视图模板中检查该变量


如果这对您不起作用,那么您可能需要一个助手:

您的控制器应该向您的视图传递一组数据

然后,您的视图可以测试是否设置了某些内容,然后相应地执行操作

$this->data['my_setting']='value';
$this->load->vars($this->data);
$this->load->view('your_view');
那么在你看来,

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

正如维多克斯所说,我认为助手是最好的出路。 大概是这样的:

<?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->load->helper('test')

您可以在视图中以这种方式声明函数:

$myfunction = function_that_do_something( ) {
}

// then call as you want
$myfunction( );
唯一的问题是,您无法从函数中访问变量->只需将它们传递到函数

,这种方式非常平滑

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

@view
echo $fnc();
控制器:

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


从视图调用控制器函数不是一个好主意。这与MVC角色背道而驰。但是您可以从视图中调用模型函数。关于这个问题的更多答案是可用的

视图中的代码,也在foreach循环中,动态获取变量,因此我无法在呈现页面时运行它。。。这是否意味着我必须让它成为助手?你能从助手处调用模型吗?你想从助手处调用模型吗?您可以从视图中调用模型,并在模型中使用checkKeyExists()方法,但不建议这样做。一年多过去了,您仍然没有接受答案…9年后我会在这里!这个问题仍然存在:-/请记住,函数不在控制器范围内,所以使用$CI=&get_instance()而不是$this
$controller->xyz();