Codeigniter视图显示<html>标签


codeigniter viewpage showing output before <html> tag

我有一个php应用程序在Codeigniter。model.php, controller.php和view.php三个页面

model.php

<?php
    class Activity_insert extends CI_Model {
        public function  activity()
        {
            echo "it works";
        }
    }
    ?>

controller.php

public function viewemp($q = NULL)
         {
            $this->load->helper('form');
            $this->load->library('form_validation');
                $this->load->model('activity_insert');
             $data['activity_log'] = $this->activity_insert->activity();
                $this->load->view('header');
                $this->load->view('sidebar');
                $this->load->view('success',$data);
                $this->load->view('footer');
         }

view.php

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>GATT</title>
  </head>
  <body class="hold-transition skin-blue sidebar-mini">
    <div class="wrapper">
    </div>
  </body>
  </html>

在编译我的视图页面后,如下所示

 it works <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>GATT</title>
      </head>
      <body class="hold-transition skin-blue sidebar-mini">
        <div class="wrapper">
        </div>
      </body>
      </html>

数据在页面开始处到达。如果我没有调用$activity_log在view.php的任何地方它仍然显示相同的文本"它的工作"在页面的开始。请帮忙解决

In Model make this

echo "it works";

return "it works";

当你的函数满足echo时,它将在它们满足时将值打印到浏览器。没有数据会通过函数返回。但是如果您使用return,它将通过回调函数返回数据。所以你可以在需要的地方使用这个值。

PHP echo和PHP return的区别是什么?

echo命令在调用时打印文本。所以,你应该只在需要向用户显示一些文本时调用它。这通常会在视图中发生。

现在,当您希望将一些文本返回到函数并在稍后使用它时,您应该使用return而不是echo并将其存储在某个变量中以供以后使用。在您的例子中,在模型中应该有

public function  activity()
{
    return "it works";
}

因此,当您调用$data['activity_log'] = $this->activity_insert->activity()时,活动函数返回的数据将被分配给$data['activity_log']变量。如果您不返回任何内容,但像现在一样执行echo,则将在加载视图之前打印字符串(这就是它出现在html开头的原因),并且由于该函数不返回任何内容,因此$data['activity_log']变量将为空。