【问题标题】:Php - passing a variable from controller to viewPhp - 将变量从控制器传递到视图
【发布时间】:2016-02-16 09:10:50
【问题描述】:

每当我运行此代码时,我都会收到未定义变量 $d 的错误,所以我注意到我必须将变量从控制器传递到视图。我是 MVC 的新手,因此如果有人帮助我解决这个问题,我将不胜感激。

这是我目前的实现: **

控制器

**

class ControllerModuleGetstoreproducts extends Controller{
    public function index() {
        $object = new ModelGetstoreproducts();
        $d = $object->fetch();
        require_once "getstoreproducts.php";
    }
    function returndata(){
        $this->db->select("count(*)");
        $this->db->from("oc_product");
        $query = $this->db->get();
        return $query->result();
    }
}

型号

<?php
class ModelGetstoreproducts{
    function fetch(){
        $sql = 'SELECT count(*) FROM oc_product';
        $req = @mysql_query($sql);
        return @mysql_fetch_object($req);
        //return $req;

    }
}
?>

查看

<p>The total is <?php var_dump($d) ?></p>

【问题讨论】:

  • getstoreproducts.php您的视图文件吗?
  • @RST 实际上是 getstoreproducts.tpl 而不是 .php .. 是的,这就是视图文件
  • 你完全确定这个模板是从这个控制器中包含的,而不是从其他地方包含的?
  • @SergeyVidusov 是的,我确定。
  • 不要使用 mysql ......它在 5.5 中已弃用,当然也不要使用 @ 来压缩......而且这个问题与 MVC 无关......你只是在问如何将变量传递给模板文件,作为默认配置,我认为.tpl 不会被解释为 php 文件,从而呈现变量和正确的输出。尝试将您的模板文件命名为.php

标签: php post model-view-controller opencart


【解决方案1】:

尝试对您的文件进行此更新:

控制器:

    class ControllerModuleGetstoreproducts extends Controller{

    public $data;

    public function index() {
        $object = new ModelGetstoreproducts();
        $this->data['products'] = $object->fetch();
        require_once "getstoreproducts.php";
    }
    function returndata(){
        $this->db->select("count(*)");
        $this->db->from("oc_product");
        $query = $this->db->get();
        return $query->result();
    }
}

查看:

<p>The total is <?php var_dump($this->data['products']) ?></p>

【讨论】:

  • 这是在codeigniter中调用视图文件的正确方法吗?
  • 这不是在控制器中调用视图文件的正确方法。但这不是问题所在。在 MVC 中调用视图的正确方法是控制器设置 viewFile 但 viewModel 返回输出。
  • @kaito 我已经应用了你提到的所有更改,但是我在 (public $data) 行中收到错误消息:“未定义的属性:Loader::$data in..”
  • 你自己构建 MVC 还是使用别人?
【解决方案2】:

将您的 id 从 View 传递到 Controller 并将其放入 Model。应用此规则您不会收到任何错误。

【讨论】:

  • 您能详细说明一下吗?我不确定我是否真的明白你的意思
猜你喜欢
  • 2012-02-10
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
  • 2011-09-14
相关资源
最近更新 更多