我正在试图弄清楚如何在Kohana中正确使用全局View变量。我有一个Controller_Base
类,它提供页面的基本布局:
abstract class Controller_Base extends Controller_Template {
public $template = 'base';
public function before () {
parent::before();
View::set_global('title' , '');
}
}
我的base.php
视图如下所示:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title><?php echo $title; ?></title>
</head>
<body>
<?php echo $content; ?>
</body>
</html>
我还有一个Controller_Welcome
类继承自Controller_Base
:
class Controller_Welcome extends Controller_Base {
public function action_index () {
$this->template->content = View::factory('welcome');
}
}
welcome.php
视图如下所示:
<?php $title = 'Some title'; ?>
<h1>Hello, world!</h1>
问题是:如何从$title
修改全局welcome.php
变量,以便在视图链base.php
的末尾可以获得它?我不想将与视图相关的任何内容放入控制器中。
答案 0 :(得分:0)
你应该能够这样做:
welcome.php
查看:
<?php View::set_global('title', 'Some title'); ?>
<h1>Hello, world!</h1>
Controller_Welcome
上课:
class Controller_Welcome extends Controller_Base {
public function action_index () {
$this->template->content = View::factory('welcome')->render();
}
}
请注意拨打render()
的电话 - 非常重要以使其正常运行!在正常执行流程中,将首先评估base
视图,然后是内部视图。为了在基础渲染之前调用set_global
,您必须先显式地渲染内部。
旁白:如果你正在做任何重要的模板化工作,你真的应该考虑使用Kostache和正确的“ViewModel”类,这是解决这个问题的一种更优雅的方法。