webman icon indicating copy to clipboard operation
webman copied to clipboard

提个小需求

Open halo123450 opened this issue 3 years ago • 6 comments

###框架很好用. #####提个小需求: 可以完善一下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;
}

halo123450 avatar Dec 24 '20 05:12 halo123450

通过容器对象(或者视图函数)调用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));
}

wanganlin avatar Dec 24 '20 06:12 wanganlin

数)调用render方法不

当你存在inc_header.html,inc_footer.html,inc_main.html这种结构的时候,你没办法调用这个view()去include对应的文件

halo123450 avatar Dec 24 '20 06:12 halo123450

main 模板 include header和footer,render 处理 mian 主模板文件。

或何不使用layout

wanganlin avatar Dec 24 '20 06:12 wanganlin

main 模板 include header和footer,render 处理 mian 主模板文件。

或何不使用layout

已经使用了layout 我说的是他缺少便捷的load分离视图的功能,还有必须在view()方法中才能传递$template,$vars

比如我后台有个全局菜单,或者需要给全局视图传递一个数组,我就需要在中间件控制权限的时候就一次性传递过去了,不需要每个控制器的方法都带着它.

halo123450 avatar Dec 24 '20 06:12 halo123450

刚刚做了更新,视图增加了view::assign()方法,用来给视图传递参数。

use support/View;
View::assign([
    'name1' => 'value1',
    'name2'=> 'value2',
]);

没有增加load方法,因为每个模板引擎有自己的include语法,不好做统一。 如果使用Raw视图,直接用原生语法<?php include app_path().'/view/header.html'; ?>include其它模版 即可。

walkor avatar Dec 24 '20 12:12 walkor

刚刚做了更新,视图增加了view::assign()方法,用来给视图传递参数。

use support/View;
View::assign([
    'name1' => 'value1',
    'name2'=> 'value2',
]);

没有增加load方法,因为每个模板引擎有自己的include语法,不好做统一。 如果使用Raw视图,直接用原生语法<?php include app_path().'/view/header.html'; ?>include其它模版 即可。

奈斯!

halo123450 avatar Dec 25 '20 07:12 halo123450