Kohana中的全局视图变量

时间:2013-11-26 14:40:46

标签: php view kohana

我正在试图弄清楚如何在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的末尾可以获得它?我不想将与视图相关的任何内容放入控制器中。

1 个答案:

答案 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”类,这是解决这个问题的一种更优雅的方法。