我正在构建自己的 MVC 框架,并且在将变量发送到视图时遇到了问题。loadView()
看起来像这样:
function loadView($view, $variables = array())
{
$file_path = APPLICATION_PATH . 'views/' . $view;
if (file_exists($file_path))
{
if (is_readable($file_path))
{
if (! empty($variables)) extract($variables);
include($file_path);
}
else
{
throw new Exception('Could not read view from ' . $file_path);
}
}
else
{
throw new Exception('Could not load view from ' . $file_path);
}
}
它按预期工作。但是,当我设置这样的模板视图时,事情变得很奇怪:
loadView('layout/header.php');
loadView($view);
loadView('layout/footer.php');
它是这样调用的($user
是一个对象):
$data['view'] = 'login/showUser.php';
$data['user'] = $user;
loadView('layout/template.php', $data);
该$view
变量在模板文件中设置并加载正确的视图。但是,该$user
变量无法进入仅包含以下代码的动态加载视图:
<p>User ID: <?php echo $user->id; ?></p>
我可以在 CodeIgniter 中执行此操作,但我觉得这有点奇怪,因为在第一次调用模板时提取$view
和$user
变量时loadView()
,它们应该可用于下一个视图,该视图只是包含在范围中。
我忽略了什么?