如何在php中将变量传递给视图
我有一个类,它包含一个加载视图的方法。这是完美的工作和页面加载正确!我遇到的问题是,我似乎无法找到将变量传递给我的方法当前尝试加载的视图的方法。如何将变量传递到页面?有没有一种方法可以操作我当前的代码来实现这一点?还是我要朝完全相反的方向走 控制器类:如何在php中将变量传递给视图,php,templates,scope,Php,Templates,Scope,我有一个类,它包含一个加载视图的方法。这是完美的工作和页面加载正确!我遇到的问题是,我似乎无法找到将变量传递给我的方法当前尝试加载的视图的方法。如何将变量传递到页面?有没有一种方法可以操作我当前的代码来实现这一点?还是我要朝完全相反的方向走 控制器类: <?php class Controller { private $args = array(); public function view($page, $args = null) {
<?php
class Controller {
private $args = array();
public function view($page, $args = null) {
if ($args !== null) {
$this->args = $args;
extract($this->args);
}
$page = VIEWS . $page . '.php';
$template = $this->getTemplate($page);
echo $template;
}
private function getTemplate($file) {
ob_start();
include($file);
$template = ob_get_contents();
ob_end_clean();
return $template;
}
}
?>
控制器:
<?php
class Page extends Controller {
public function person($age) {
$data['age'] = $age;
$this->view('person', $data);
}
}
?>
查看内容:
</h1>My name is Dennis. My age is: <?php echo $age; ?></h1>
我叫丹尼斯。我的年龄是:
最终结果是一个未定义的变量($age)。尝试以下方法:
</h1>My name is Dennis. My age is: <?php echo $data['age']; ?></h1>
我叫丹尼斯。我的年龄是:
试试这个:
</h1>My name is Dennis. My age is: <?php echo $data['age']; ?></h1>
我叫丹尼斯。我的年龄是:
提取变量的方法与包含模板的方法不同。如果要在模板中使用普通变量,请确保在同一范围内提取它们。提取变量的方法与包含模板的方法不同。如果要在模板中使用普通变量,请确保在相同的范围内提取它们。在view()
中提取的变量在getTemplate()
中不可用。这是一个不同的范围。相反,应该使用与渲染相同的方法提取它们
另外,这里没有MVC视图。这只是一个小问题。MVC中的视图是负责UI逻辑的实例。它应该从模型层请求所需的信息,然后,如果响应不是简单的HTTP位置头,则使用多个模板创建HTML。在
view()
中提取的变量在getTemplate()
中不可用。这是一个不同的范围。相反,应该使用与渲染相同的方法提取它们
另外,这里没有MVC视图。这只是一个小问题。MVC中的视图是负责UI逻辑的实例。它应该从模型层请求所需的信息,然后,如果响应不是简单的HTTP位置头,则使用多个模板创建HTML。最简单的方法是将$args变量传递给getTemplate,并在getTemplate方法中执行extract方法
private function getTemplate($file, $args = null) {
if ($args !== null) {
extract($args);
}
ob_start();
include($file);
$template = ob_get_contents();
ob_end_clean();
return $template;
}
当包含并捕获输出时,将执行该php文件,因此在包含之前,必须显示所有变量
如果不想传递变量,可以在模板内部使用$this->args最简单的方法是将$args变量传递给getTemplate,并在getTemplate方法中执行extract方法
private function getTemplate($file, $args = null) {
if ($args !== null) {
extract($args);
}
ob_start();
include($file);
$template = ob_get_contents();
ob_end_clean();
return $template;
}
当包含并捕获输出时,将执行该php文件,因此在包含之前,必须显示所有变量
如果不想传递变量,可以在模板内部使用$this->args@JosephSilber构建自定义框架。更多学习内容。@JosephSilber构建自定义框架。更多信息供学习。该范围内没有变量$data该范围内没有变量$data太棒了!工作起来很有魅力。感谢您提供有关视图与模板的信息!我将仔细阅读。调用
提取
甚至没有必要,因为数据已经在$this->args
@Jack中可用,我实际上建议不要这样做。它会添加“必须从对象内部呈现”作为隐藏要求。这是有道理的,尽管“必须使用这些全局变量进行呈现在我看来同样糟糕”:@Jack,嗯。。模板使用的变量不是全局变量。唯一的要求是它们存在于所述模板呈现的范围内。太棒了!工作起来很有魅力。感谢您提供有关视图与模板的信息!我将仔细阅读。调用提取
甚至没有必要,因为数据已经在$this->args
@Jack中可用,我实际上建议不要这样做。它会添加“必须从对象内部呈现”作为隐藏要求。这是有道理的,尽管“必须使用这些全局变量进行呈现在我看来同样糟糕”:@Jack,嗯。。模板使用的变量不是全局变量。唯一的要求是它们存在于呈现所述模板的范围内。