Kohana会议问题

时间:2011-12-24 16:00:04

标签: php session kohana kohana-3

让我试着解释一下我想做什么。我正在尝试从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();一旦设置完就可以在任何控制器,模型和视图中调用的函数。

提前感谢您对我所做错误的任何输入。

1 个答案:

答案 0 :(得分:1)

您可以使用以下

为视图设置或绑定全局数据
View::bind_global('session', $session);
View::set_global('session', $session);

如果您计划在应用程序逻辑中进一步更改任何数据,请使用 bind

如果不再需要更改数据,请使用设置

编辑:哦,以上仅适用于视图,您希望它遍及整个应用程序。

只需在应用程序中使用Session :: instance() - > set()和Session :: instance() - > get(),而不是在应用程序控制器中分配它。