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

技巧库 · fecommerce · 于 6年前 发布 · 8598 次阅读

原文链接:http://www.fancyecommerce.com/2016/05/23/yii2-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;    
    }

在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的方式,通过配置加载进来实现。

本文由 fecommerce 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。


微信

共收到 1 条回复 yii2 render
stromknight#16年前 0 个赞

赞一个

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册