yii2 通过 render , views页面生成显示html的原理

在controller里面有一个 render 函数

$this->render($this->action->id,['xxx'=>'3333']);

也就是通过一个render函数,把view文件和对应的参数数组传递进去,然后生成对应的html返回,这是怎么实现的呢?

这里用到的是php 的ob系列函数:

public function renderPhpFile($_file_, $_params_ = [])    
  {    
      ob_start();    
      ob_implicit_flush(false);    
      extract($_params_, EXTR_OVERWRITE);    
      require($_file_);    
      return ob_get_clean();    
  }

如果我们想嵌套,也就是一个ob函数里面有其他的ob函数,可以这样:

public function dd($i){    
        $i--;    
        if($i > 0){    
            ob_start();    
            echo "test".$i;    
            $str = ob_get_clean();    
            return $str.$this->dd($i);    
        }else{    
            return 22;    
        }    
    }    
       
    public function actionIndex(){    
            
         ob_start();    
     
        echo "Hellon/"; //输出     
    
    
        echo $this->dd(6);    
                    
            
        ob_end_flush();//输出全部内容到浏览器     
        exit;    
}

这样就可以吧一些东西做成tab html,譬如侧栏的联系我们,newsletter,等一些div框,就可以做成tab的方式,通过配置加载进来实现。