我知道您可以使用 extract(( 来实现这一点,但我的情况如下:
我正在为个人项目构建一个非常小的基本 MVC 框架,我的控制器中有一个:
public function index(){
$data = [
'title' => 'Welcome'
];
$this->view('pages/index', $data);
}
如您所见,这会将数据数组传递到视图中,您可以像以下方式回显它:
echo $data['title'];
但我想回应它,就像我知道 extract(( 可以做到这一点echo $title;
但这意味着我必须手动将extract($data);
放在每个页面的顶部,这不是世界末日,但我只是好奇是否有办法可以自动完成?我试图通过将提取放在视图功能中使用提取,但这不起作用。我还尝试通过将提取放在索引中required_once的头文件中来使用提取.php(从而使头文件成为始终需要的静态标头(,但两者都不起作用,因此任何建议都会很棒。
以下是根据请求的视图函数的代码:
public function view($view, $data = []){
if(file_exists('../../views/'.$view.'.php')){
require_once '../../views/'.$view.'.php';
} else {
die('View does not exist');
}
}
很简单,使用紧凑和提取功能
索引方法
public function index(){
$title='Welcome';
$this->view('pages/index', compact('title'));
}
威尤法
public function view($view, $data = []){
extract($data);
if(file_exists('../../views/'.$view.'.php')){
require_once '../../views/'.$view.'.php';
} else {
die('View does not exist');
}
}
在 html 中
<h1> hello <?php echo $title; ?></h1>
这是我出错的地方,我之前将提取放在视图方法中,但它不起作用。
然而,这里的建议是把它放在视图函数中,我现在明白我把提取函数放在require_once '../../views/'.$view.'.php';
之后,我只是把提取放在那行代码之前,它现在可以工作了!