从codeigniter中查看访问模型?

时间:2010-04-27 08:56:47

标签: php codeigniter

任何人都可以告诉我如何从codeigniter中的视图访问模型?

10 个答案:

答案 0 :(得分:17)

在控制器上加载模型

$this->load->model('yourmodel');

将此模型分配给这样的

$data['model_obj'] = $this->yourmodel; 

并将此数据数组分配给视图模板

在视图模板上使用$ model_obj对象来调用模型方法

$model_obj->some_method()

希望这会有所帮助......

答案 1 :(得分:6)

见线程:

View Calling a Model

顺便说一下,为什么你需要从model访问view,你也可以将模型数据发送到controller的视图,这是通常的更好的方法

作为一个好注意事项,请将处理逻辑排除在视图之外,您应该使用controller代替。

答案 2 :(得分:5)

CodeIgniter的$this->load->model()绝对没有返回任何内容。看看它:system/libraries/Loader.php

这绝不会输出任何内容:

$model = $this->load->model('table');

print_r($model);

下一个示例将为您提供致命错误Call to a member function some_func() on a non-object

$model = $this->load->model('table');

$model->some_func();

该功能是否存在无关紧要,$model不是对象。

要做的是在模型中有一个返回数据的方法,然后调用该函数并将结果传递给视图文件:

$this->load->model('table');
$data = $this->table->some_func();
$this->load->view('view', $data);

PS:你接受绝对错误的唯一答案是什么?

答案 3 :(得分:5)

您可以使用以下代码:

   $ci =&get_instance();
   $ci->load->model(your model);
   $ci->(your model)->(your function);     
   Note: You have to call your model in your controller.Its working fine

答案 4 :(得分:1)

由于$ model不是一个对象,你可以使用“::”作用域解析运算符调用模型“table”,它可以在没有任何对象实例的情况下调用类本身的函数。

$this->load->model('table'); 
table::some_funct();

注意:您还需要在模型“table”中使函数“some_funct”为静态。

答案 5 :(得分:1)

如果要从共享视图中访问模型函数,则不必在将要调用该视图的每个控制器中加载所需的模型。您可以使用以下代码在视图自身内部加载模型

   $ci =&get_instance();
   $ci->load->model(model_name);
   $ci->model_name->function_name(); 

在旧版本的codeigniter中,以下代码可以正常工作:

$this->load->model('model_name'); 
model_name::function();   

但是在CI 3.1.9上测试时,它会引发以下错误 消息:未定义的属性:CI_Loader :: $ model_name_model

注意:如果要从应用程序环境中的任何地方访问模型,我会在模板视图(边栏,菜单...等)中使用此技术,但该视图在我的应用程序中并不普遍使用通过将其添加到 application / config / autoload.php

中的自动加载数组中,全局加载该模型

答案 6 :(得分:0)

嘿。您可以从视图访问模型,使其在您的控制器上访问相同的模式。请记住,视图访问导入其控制器的模型。

答案 7 :(得分:0)

在原始的UML中,我似乎对MVC架构,在模型中查看调用方法。

http://www.as3dp.com/wp-content/uploads/2010/02/mvc_pope_krasner.png

..但在PHP应用程序的实践中,因为没有持久性来跟踪请求之间对象的状态更改(或者至少没有效率),我发现最好将所有模型方法调用保留在控制器中并将结果传递给如果可能的话。

答案 8 :(得分:0)

您可以将模型名称添加到配置 -> 自动加载模型

$autoload['model'] = array('model_name');

我的成功

答案 9 :(得分:-2)

您可以从codeigniter中的视图中基本访问一个方法。

public function index()
{

    $this->load->model('persons');
    $data['mydata'] = $this->persons->getAllSessionData();
    $this->load->view('test_page', $data);
}

在视图中

print_r ($mydata);

我的函数返回了一个数组。