Kohana 中的全局视图变量
Posted
技术标签:
【中文标题】Kohana 中的全局视图变量【英文标题】:Global view variables in Kohana 【发布时间】:2013-11-26 14:40:46 【问题描述】:我正在尝试弄清楚如何在 Kohana 中正确使用全局视图变量。我有一个 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>
问题是:如何从welcome.php
修改全局$title
变量,以便在视图链的末尾base.php
可以得到它?我不想将与视图相关的任何内容放入控制器中。
【问题讨论】:
“我不想将任何与视图相关的东西放入控制器中。”但是控制器负责为视图提供所需的数据。也许你喜欢 Kostache 的工作方式。 是的,你可能是对的。但我认为“所有发生的事情都在视野中”:-) 我知道 Kostache,但想知道是否有本地解决方案。 我认为你必须编写自己的模板控制器才能工作。通过这种方式,您可以管理渲染模板的顺序以及设置和使用变量的时间。 查看bind_global()
。对我来说,模板(base.php)视图在最后呈现是有道理的,首先,必须设置所有模板变量,这只能在它包含的所有视图和变量的执行和呈现期间发生。
@AmazingDreams 我知道bind_global()
。它将某个变量(或类属性)的引用指向View::$_global_data
。这意味着我应该用一个变量或一个类属性来存储它。而且我还需要以某种方式从视图中访问它。
【参考方案1】:
你应该可以这样做:
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”类一起使用,这是解决此问题的一种更优雅的方法。
【讨论】:
以上是关于Kohana 中的全局视图变量的主要内容,如果未能解决你的问题,请参考以下文章