是否可以从视图中调用位于控制器中的函数?
这就是我在控制器中所拥有的一个例子
function checkKeyExists($userid, $key){
}
然后在我的视图中我有以下
if(checkKeyExists($row->id, $role->key)){
}
但是当我运行它时,它表示没有定义checkKeyExists。
如果有人能让我知道如何做到这一点,那就太好了。
答案 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