让我试着解释一下我想做什么。我正在尝试从Codeigniter 2.x重新编写宠物项目到Kohana 3.2.x。
我创建了一个站点模板控制器(下面)
class Controller_Site_Template extends Controller_Template
{
public $template = 'templates/hero';
/**
* The before() method is called before your controller action.
* In our template controller we override this method so that we can
* set up default values. These variables are then available to our
* controllers if they need to be modified.
*/
public function before()
{
parent::before();
if ($this->auto_render)
{
// Initialize empty values
$this->template->title = '';
$this->template->content = '';
$this->template->session = '';
$this->template->styles = array();
$this->template->footer_scripts = array();
$session = Session::instance();
$this->template->session = $session;
}
}
/**
* The after() method is called after your controller action.
* In our template controller we override this method so that we can
* make any last minute modifications to the template before anything
* is rendered.
*/
public function after()
{
if ($this->auto_render)
{
$styles = array(
'assets/css/style.css' => 'screen',);
$footer_scripts = array(
'assets/js/libs/jquery-1.7.1.min.js',
'assets/js/application.js',
);
$this->template->styles = array_merge( $this->template->styles, $styles );
$this->template->footer_scripts = array_merge( $this->template->footer_scripts, $footer_scripts );
}
parent::after();
}
提交登录表单后,我设置会话数据,我能够在控制器中检索扩展Controller_Site_Template的会话数据,但我无法检索任何View文件中的会话数据。
我能够在视图文件中获取会话数据的唯一方法是在扩展Template_Site_Template的每个控制器中传递会话数据:
$this->template->content->set_global('session',$this->template->session->as_array());
是否有一种简单的方法可以在template_controller中建立和设置会话,该会话可以在所有控制器,模型,视图中使用,而不是在每个控制器上使用set_global?
我不知道我是否正在解释这个问题,但我已经习惯了Codeigniter的简易程序$ this-> session-> userdata();一旦设置完就可以在任何控制器,模型和视图中调用的函数。
提前感谢您对我所做错误的任何输入。
答案 0 :(得分:1)
您可以使用以下
为视图设置或绑定全局数据View::bind_global('session', $session);
View::set_global('session', $session);
如果您计划在应用程序逻辑中进一步更改任何数据,请使用 bind 。
如果不再需要更改数据,请使用设置。
编辑:哦,以上仅适用于视图,您希望它遍及整个应用程序。
只需在应用程序中使用Session :: instance() - > set()和Session :: instance() - > get(),而不是在应用程序控制器中分配它。