原文链接: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 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。
微信