根据我的阅读,视图应该尽可能简单。
在视图中访问会话变量是一种好习惯吗?
即
// in the view
<?php if ($this->session->userdata('is_logged_in') : ?>
// stuff
<?php endif; ?>
答案 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模式的理念,因为会话是全局信息。