CodeIgniter - 从视图内部调用函数

时间:2010-12-05 03:36:01

标签: codeigniter

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

这就是我在控制器中所拥有的一个例子

function checkKeyExists($userid, $key){
}

然后在我的视图中我有以下

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

但是当我运行它时,它表示没有定义checkKeyExists。

如果有人能让我知道如何做到这一点,那就太好了。

7 个答案:

答案 0 :(得分:13)

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

如果这对您不起作用,也许您需要帮助:https://www.codeigniter.com/user_guide/general/helpers.html

答案 1 :(得分:6)

像威多克斯说的那样,我认为助手是最好的出路。 像这样:

<?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-&gt; load-&gt; helper('test');.

答案 2 :(得分: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
}

答案 3 :(得分:1)

你可以在视图中以这种方式声明一个函数:

$myfunction = function_that_do_something( ) {
}

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

唯一的一点就是你无法从函数中访问变量 - &gt;只需将它们传递给函数

答案 4 :(得分:0)

这种方式很顺利。

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

@view
echo $fnc();

答案 5 :(得分:0)

控制器:

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

查看:

$controller->xyz();

答案 6 :(得分:0)

从视图中调用控制器功能不是一个好主意。它反对MVC角色。但是您可以从视图中调用Model函数。关于这个问题的更多答案是可用的here