webman
webman copied to clipboard
提个小需求
###框架很好用. #####提个小需求: 可以完善一下view吗?完善点包括可以在任意位置load分离的视图,和可以在任何时候给view视图传参.建议视图handle上新增vars() 和 load 静态方法.
以Raw视图举例:
public static function vars($vars, $val = '')
{
if($vars)
{
$vars = is_string($vars)
? [$vars => $val]
: self::_raw_prepare_view_vars($vars);
foreach ($vars as $key => $val)
{
self::$_raw_cached_vars[$key] = $val;
}
}
return self::$_raw_cached_vars;
}`
和
public static function load($template, $vars = [], $app = NULL)
{
$vars = self::vars($vars);
static $view_suffix;
$view_suffix = $view_suffix ? : config('view.view_suffix', 'html');
$app_name = $app == null ? request()->app : $app;
if ($app_name === '') {
$view_path = app_path() . "/view/$template.$view_suffix";
} else {
$view_path = app_path() . "/$app_name/view/$template.$view_suffix";
}
if($vars) \extract($vars);
try {
include $view_path;
} catch (\Throwable $e) {
echo $e;
}
return TRUE;
}
通过容器对象(或者视图函数)调用render方法不能满足你?
/**
* @param $template
* @param array $vars
* @param null $app
* @return string
*/
function view($template, $vars = [], $app = null)
{
static $handler;
if (null === $handler) {
$handler = config('view.handler');
}
return new Response(200, [], $handler::render($template, $vars, $app));
}
数)调用render方法不
当你存在inc_header.html,inc_footer.html,inc_main.html这种结构的时候,你没办法调用这个view()去include对应的文件
main 模板 include header和footer,render 处理 mian 主模板文件。
或何不使用layout
main 模板 include header和footer,render 处理 mian 主模板文件。
或何不使用layout
已经使用了layout 我说的是他缺少便捷的load分离视图的功能,还有必须在view()方法中才能传递$template,$vars
比如我后台有个全局菜单,或者需要给全局视图传递一个数组,我就需要在中间件控制权限的时候就一次性传递过去了,不需要每个控制器的方法都带着它.
刚刚做了更新,视图增加了view::assign()方法,用来给视图传递参数。
use support/View;
View::assign([
'name1' => 'value1',
'name2'=> 'value2',
]);
没有增加load方法,因为每个模板引擎有自己的include语法,不好做统一。
如果使用Raw视图,直接用原生语法<?php include app_path().'/view/header.html'; ?>
include其它模版 即可。
刚刚做了更新,视图增加了view::assign()方法,用来给视图传递参数。
use support/View; View::assign([ 'name1' => 'value1', 'name2'=> 'value2', ]);
没有增加load方法,因为每个模板引擎有自己的include语法,不好做统一。 如果使用Raw视图,直接用原生语法
<?php include app_path().'/view/header.html'; ?>
include其它模版 即可。
奈斯!