自定义MVC,如何为控制器实现渲染功能,以便View可以访问Controller设置的变量

myt*_*mer 8 php model-view-controller

我正在为现有代码库添加新功能.无论如何,在我看来,我正在做的当前功能应该在MVC中.现有的代码库不是MVC,而是我正在实现的功能,我希望它是MVC.我不想将现有的MVC转换为现有的代码.

所以,我的问题是......我不知道为控制器类实现一个渲染函数.通常,在MVC中,您可以让控制器执行一些操作,使用render函数将其设置为变量,View现在可以神奇地访问控制器设置的给定变量.

我不知道除了全球之外该如何做到这一点,只是感觉不对,我一直告诉自己必须有一个更好的方法.编辑:这不是全球性的吗?> _>那些其他框架是如何做到的?

这是一个愚蠢的例子:

控制器:

class UserController extend BaseController 
{
public function actionIndex() 
{
  $User = new User; // create a instance User model

  $User->getListofUser();

  $this->render('ListOfUser', 'model'=>$model);
}
}
Run Code Online (Sandbox Code Playgroud)

视图:

<?php
//I can use $ListOfUser now...
//some for loop
echo $ListofUser[$i];
?>
Run Code Online (Sandbox Code Playgroud)

先感谢您!

dec*_*eze 20

一个非常简单的例子:

class View {
    function render($file, $variables = array()) {
        extract($variables);

        ob_start();
        include $file;
        $renderedView = ob_get_clean();

        return $renderedView;
    }
}

$view = new View();
echo $view->render('viewfile.php', array('foo' => 'bar'));
Run Code Online (Sandbox Code Playgroud)

在里面,viewfile.php你将能够使用变量$foo.视图文件中的任何代码都可以访问$this(View实例)以及render函数内范围内的任何变量.extract将数组的内容提取到局部变量中.