Kohana - views文件夹中的子文件夹

时间:2009-12-08 02:48:53

标签: php kohana directory-structure

我正在使用Kohana处理网站的管理部分。我在views文件夹中创建了一个“admin”子文件夹来存储管理员视图。我还在管理部分使用模板控制器的修改实例,称为管理模板控制器,如下所示:

abstract class Admin_Template_Controller extends Template_Controller
{
    public $template = 'admin/template';

    public function __construct()
        {
            parent::__construct();

            $this->template = View::set_filename($this->template);
            $this->template->css = 'adminstyles';
            $this->template->js  = 'html5';
        }
}

但是,我收到的错误是css变量未在“admin / template”文件中定义。此时,模板文件与我成功用于创建大部分前端的views文件夹中的模板文件相同,因此它不在那里。另外,需要注意的一个重要事实是,当我在views文件夹中使用模板文件时(对于前端),它正确加载页面。

这让我相信它与位于子文件夹中的模板文件有关。这让我感到困惑,因为我从同一个“views / admin”文件夹中成功加载了另一个视图文件。该文件虽然不包含任何变量,但也许这就是它加载的原因。

我试过

 $this->template = View::factory($this->template);

也要加载新模板文件,但它返回一个错误,必须在渲染之前调用该视图。我认为这是由于自动渲染开启,但我想要它。

任何想法都会有很大的帮助。显然,我可以将文件移出admin文件夹并重命名,但这并不能帮助我了解正在发生的事情。

3 个答案:

答案 0 :(得分:2)

您删除了这一行:

$this->template = View::set_filename($this->template);

打破了它,因为set_filename()不是静态方法;应该在视图的现有实例上调用该方法,因为该方法返回自身(对于方法链接很有用)。但是,您首先不需要这样做,因为您正在扩展Template_Controller类,该类在您使用parent :: _ construct()调用的构造函数中为您创建模板视图。

如果您有一个现有的模板对象,但只想更改与之关联的视图而不必重新创建一个全新的对象,则只需要使用set_filename()方法。

最后,auto_render选项触发一个后控制器挂钩,在控制器完成时呈现视图;这对控制器类的任何方法内的代码都没有任何影响。

答案 1 :(得分:0)

我找到了问题的答案。这一行:

$this->template = View::set_filename($this->template);

需要删除。也许它会再次加载模板并取消变量。我不确定。但是,我认为该行是必要的,以更改我正在扩展的模板控制器中定义的模板文件名。我以为我在Kohana论坛上正确地阅读了这一点。我想不是。希望这有助于其他人。

答案 2 :(得分:0)

视图子文件夹的名称应与控制子文件夹中视图的控制器完全相同。