在 Codeigniter 中查看之前加载模型

Posted

技术标签:

【中文标题】在 Codeigniter 中查看之前加载模型【英文标题】:Model gets loaded before view in Codeigniter 【发布时间】:2013-10-06 05:16:00 【问题描述】:

我在 codeigniter pages.php 中有一个控制器

class Pages extends CI_Controller 

    public function view($page = 'home')
    
        $this->load->view('header');
        echo("<br>");
        $this->load->model("math");
        echo $this->math->add(1,2);
    

模型:math.php

class math extends CI_Controller

    public function add($val1,$val2)
        return $val1+$val2;
    

视图:header.php

<html>
<head>
    <title>fashion and style</title>
</head>
<body>
<?php
    echo("this is the header");
?>

根据控制器,代码应输出:

this is the header

number

但我得到如下输出:

number this is the header

为什么?

【问题讨论】:

类数学扩展 CI_Controller ==> CI_Model 是拼写错误!!只是想知道... 嗯,你在控制器或模型中回显的任何内容都会出现在任何视图之前,因为视图在 index.php 中呈现并在最后一步中显示。 @GauravMehra 怎么说呢,文档里有吗,请分享链接 CodeIgniter view loading not loading in order? 的可能重复项 【参考方案1】:

如果您将直接从 codeignitor 控制器回显字符串,它将在渲染加载的视图之前渲染字符串。如果你想这样做,你可以试试like-

$str = $this->math->add(1,2);
$this->output->append_output($str);

然后你的控制器看起来像-

class Pages extends CI_Controller 

    public function view($page = 'home')
    
        $this->load->view('header');
        $this->load->model("math");
        $str = "<br>".$this->math->add(1,2);
        $this->output->append_output($str);
    

希望这会有所帮助。

【讨论】:

【参考方案2】:

试试这个:

控制器:

class Pages extends CI_Controller 

    public function view($page = 'home')
    
        $this->load->model("math_model");
        $data['number'] = $this->math_model->add(1,2);

        $this->load->view('header',$data);

    

模型 math_model.php

型号:

class Math_model extends CI_Model

    public function add($val1,$val2)
        return $val1+$val2;
    

视图 header.php

<html>
<head>
    <title>fashion and style</title>
</head>
<body>
<?php
    echo("this is the header");
?>
echo("<br>");
<?php 
        echo $number;
?>
</body>
</html>

型号详情请看这里https://www.codeigniter.com/user_guide/general/models.html

查看这里https://www.codeigniter.com/user_guide/general/views.html

【讨论】:

您似乎也错过了文档的关键部分:“类名的第一个字母必须大写” 不,不是这部分,答案在于@gauravmehra 的评论(第二条评论) 视图被缓冲。当您直接在控制器中回显某些内容时,它会在刷新缓冲区之前发送(因此在包含视图的输出发送到浏览器之前),这就是它出现在任何内容之前的原因。您不应该这样做(发送直接输出/在视图之外回显某些内容),一旦您使用与标头相关的任何内容(重定向、cookie、CI 会话......),您就有陷入麻烦的风险。

以上是关于在 Codeigniter 中查看之前加载模型的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter CSS、JS 和图像未加载,可能假定为目录

PHP 在CodeIgniter中将一个模型加载到另一个模型中

在CodeIgniter中将一个模型加载到另一个模型中

无法为 Codeigniter 加载模型

codeigniter 帮助在加载模型时导致错误

使用 cpanel 的 codeigniter 密码保护目录