首页 > 解决方案 > MVC:如何将数组和变量从模型传递到视图?

问题描述

我正在尝试将$task数组和$str_pag变量传递给视图。我尝试将变量声明$str_pag为公共,但视图显示一个数组,而变量没有。

控制器

class Index extends Controller{
   public function __construct() {
     parent::__construct();
     require 'views/header.php';
     require 'models/index_model.php';

     }

   public function index() {
     $tasks = Index_Model::index($id, $login, $email, $password);
     require 'views/index/index.php';
     require 'views/footer.php';
     }
}

模型

class Index_Model extends Model
{
    
    public $str_pag;
    
    public function index($id, $login, $email, $password)
    {
        $db = new Database();

        if (isset($_GET['page'])){
            $page = $_GET['page'];
        }else 
            $page = 1;

        $total = Index_Model::getCount();
        $kol = 3;  
        $art = ($page * $kol) - $kol; 

        $str_pag = ceil($total / $kol);

        $stm = $db->prepare('SELECT * FROM users LIMIT ?,?');
        $stm->bindValue(1, $art, PDO::PARAM_INT);
        $stm->bindValue(2, $kol, PDO::PARAM_INT);
        $stm->execute();

        $task = array();
        $i=0;
        while($row=$stm->fetch()) {
            $task[$i]['name'] = $row['name'];
            $task[$i]['email'] = $row['email'];
            $i++;
        }
        return $task;
    }

标签: phpmodel-view-controller

解决方案


您可以从 Model 返回任何您需要的值数组。

然后,在您调用模型方法的控制器内部,只需将其分配给将传递给视图的变量。

解决方案:

在模型更改return $task;return [$task, $str_pag];

然后在控制器中编辑您的index()方法,如下所示:

public function index() {
     list($tasks,$str_pag) = Index_Model::index($id, $login, $email, $password);
     require 'views/index/index.php';
     require 'views/footer.php';
}

顺便提一下,试图从视图中访问模型的公共属性并不是一个好主意,因为它打破了整个MVC想法。$_GET从模型代码中访问全局变量也是如此。而不是这个 - 将它作为参数传递并从return语句中获取它。

那是控制器“控制”所有这些东西的责任。


推荐阅读