代码之家  ›  专栏  ›  技术社区  ›  Dr Casper Black

RenderToHtml视图文件并返回字符串?

  •  0
  • Dr Casper Black  · 技术社区  · 14 年前

    我制作了一个小型的MVC框架,但是我需要我的view类能够以字符串的形式返回页面,但是在这之前应用所有的变量。怎么能做到?

    class View{
        private $registry;
        private $vars = array();
        private $file;
        public function __set($index, $value){
            $this->vars[$index] = $value;
        }
    
        public function  __construct($controller, $action){
            $this->file = "Views/".$controller."/".$action.".php";
            $this->registry = new Registry();
        }
    
      public function renderToHtml(){
            try{
                if(file_exists($this->file)){
    
                    foreach ($this->vars as $key => $value){
                       $$key = $value;
                    }
    
                    /** include $this->file; **/ 
    //apply vars on file 
                    return $html;
                }else{
                    throw new Exception("No such View file");
                }
            }catch (Exception $e) {
                echo '<h1>Caught exception: ',  $e->getMessage(), "</h1>";
                exit;
            }
        }
    

    控制器:

    public function indexAction(){
       $html = new View('SomeController', 'htmlview');
       $html->somevar = "blabla";
       $this->View->fubar = $html->renderToHtml();
       $this->View->render() //this will render the current action/view (index) 
    }
    

    所以htmlview将是正则indexView中的一部分

    2 回复  |  直到 14 年前
        1
  •  1
  •   ajreal    14 年前

    使用 output buffering

    例子:

    ob_start();
    /* your error catch */
    $render_html = ob_get_flush();
    return $render_html;
    
        2
  •  0
  •   Thariama    14 年前

    看起来您需要获取文件内容并替换其中的所有变量。