Codeigniter:View访问会话的最佳实践

时间:2010-12-26 19:03:43

标签: php codeigniter

根据我的阅读,视图应该尽可能简单。

在视图中访问会话变量是一种好习惯吗?

// in the view
<?php if ($this->session->userdata('is_logged_in') : ?>
  // stuff

<?php endif; ?>

5 个答案:

答案 0 :(得分:4)

对您实际问题的直接回答很简单:是的,可以在视图中访问会话变量。因为会话或常规,它们就是一个变量。存储信息的地方。

我经常使用$this->session->flashdata在标题内的视图的已定义区域中显示消息。

我说这个的原因是因为其他人似乎跳过了你的实际问题来得到“为什么”你问了一个问题,“检查身份验证的最佳位置在哪里?”对于我来说,Cadmus的回答是正确的,但同样,不要认为你不应该从视图中访问会话“数据”,但检查身份验证需要在Controller级别确定

答案 1 :(得分:3)

如果你不想把这些&#34;逻辑&#34;进入视图(IMO是一件好事),你需要在控制器中。这样,视图本身也会变得更清晰:

<?php if($logged_in): ?>
do stuff
<?php else: ?>
do different
<?php endif; ?>
带有$ logged_in的

来自执行所有会话工作的视图。您可以编写自己的控制器,从CI控制器扩展,以便类扩展您的控制器或将其抽象为具有一些静态方法的单独的Session类。我认为如果你进行大量的会话处理,用你自己的逻辑扩展CI控制器似乎是最干净的方法。

答案 2 :(得分:1)

如果您使用这些变量那么多,您可以使用帮助器。您可以像访问它一样访问它:

<?php if (is_logged_in()) : ?>
     <!--your html code -->
<?php else ?>
     <!--more html code -->
<?php endif;?>

然后在你的助手中,称为access_helper,例如,你有:

<?php
      function is_logged_in() { 
        return $this->session->user_data('is_logged_in');
      }
?>

答案 3 :(得分:0)

我不确定最佳做法,但我喜欢用我的方式处理会话和观点。 我把会话数据检查用户是否登录到我的控制器的构造函数。

然后我自动获得会话验证,我从该控制器加载的页面正在自动获取会话封面。

 public function __construct() {
    parent::__construct();
    if (!$this->session->userdata('user_data')) {
        return redirect('login');
    } else {
               redirect('dashboard');
           }

    $this->load->model('customer_model');
}

以及我使用flash数据的视图成功或失败消息。

private function _falshAndRedirect($successful, $successMessage, $failureMessage) {
    if ($successful) {
        $this->session->set_flashdata('feedback', $successMessage);
        $this->session->set_flashdata('feedback_class', 'alert-success');
    } else {
        $this->session->set_flashdata('feedback', $failureMessage);
        $this->session->set_flashdata('feedback_class', 'alert-danger');
    }
    return redirect('customer/view_customer');
}

这里我使用私有函数将我的消息发送到视图。

然后你创建函数,并且函数自动获得“会话的封面”。

希望这会有所帮助。

答案 4 :(得分:-3)

无法从帮助程序访问会话变量。最简单的方法是从视图中访问会话变量。

<?php if ($this->session->user_data('is_loggen_in'): ?>
    <!-- HTML stuff -->
<?php endif; ?>

在我看来,我认为这不会影响MVC模式的理念,因为会话是全局信息。