在加载程序视图方法中获取控制器变量


Getting controller variables in a loader view method?

我正在构建一个脚本,其中有一个静态类用于加载一些东西,包括文件和视图。

class load
{
    public static function view($file_path, $area)
    {
        debug::log('getting view <b>' . $area . $file_path . '</b>.');
        ob_start();
        self::file($file_path, 'areas/' . $area . '/views');
        debug::log('flushing view <b>' . $area . $file_path . '</b>.');
        eturn ob_get_clean();
    }
    public static function file($file, $folder)
    {
        if(is_file($file_path = ROOT . '/' . $folder . '/' . $file)) 
        {
            if(require_once $file_path)
            {
                debug::log('file <b>' . $file_path . '</b> included.');
                return true;
            }
        }
        else
            debug::kill('requested file <b>' . $file_path . '</b> does not exist.');
    }   
}

在控制器中,Im调用视图方法来获得视图:

$html = load::view('public', 'path/to/view/file.php');

显然,使用这种做法,我无法在视图文件中访问来自控制器的变量,所以我对视图类做了一个小修改,以捕获vars:

public static function view($file_path, $area, $vars = array())

并添加了以下代码行以将密钥放入vars:

while(list($n_list_var,$v_list_var)=each($vars))
        $$n_list_var = $v_list_var;

但是我再次无法访问vars,因为我使用了一个方法来加载文件。

我有一个加载文件的方法,因为我想测试和记录每个文件包含尝试,而不是每次需要包含文件时都重复代码。我在loader类中有loader视图,所以我把这类方法都放在一起了。我应该放弃使用类加载文件吗?我应该在控制器的可扩展类上使用loader视图方法吗?

与其继续修改我的整个剧本,我更想听听一些意见。。。最好的做法是什么?或者有办法解决我的问题吗?也许使用__set和__get魔术方法?

谢谢,

为什么不将$vars参数传递给load::file()extract( $vars )(可能会将file()中使用的变量移动到类变量中,以防止它们被覆盖)?

我建议使用extract()而不是

while(list($n_list_var,$v_list_var)=each($vars))
    $$n_list_var = $v_list_var;

顺便说一句,将你的类命名为Load是个好主意。