2009-12-08 103 views
-2

我正在使用Kohana的网站的管理部分。我在views文件夹中创建了一个“admin”子文件夹来存储管理视图。我还使用了模板控制的修改实例称为管理模板控制管理部分,在这里看到:Kohana - 视图文件夹内的子文件夹

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变量不是“管理中定义的错误/模板“文件。此时,模板文件与视图文件夹中的模板文件相同,我已成功用于创建大部分前端,因此它不在那里。另外,当我使用视图文件夹中的模板文件(用于前端)时,它会正确加载页面,这一点很重要。

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

我已经试过

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

要加载新的模板文件也,但它返回一个错误的观点必须渲染之前被调用。我认为这是由于自动渲染,但我想要它。

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

回答

0

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

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

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

2

这行你删除:

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

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

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

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

0

视图子文件夹应该与控制子文件夹中视图的控制器完全一致。

相关问题