所以我现在处于两难的境地。我想在我的网站上实现一个登录按钮,该按钮在没有用户登录时出现。但是,如果有人已经登录,我希望该按钮更改为指向用户个人资料的链接。
我不知道这样做的正确方法是在 View 中放置一个 if 语句,它根据从 Controller 传递的数据呈现不同的 HTML,或者 Controller 是否需要决定用户是否登录,并将适当的数据结构传递给视图。在 CodeIgniter 中执行此操作的正确方法是什么?
所以我现在处于两难的境地。我想在我的网站上实现一个登录按钮,该按钮在没有用户登录时出现。但是,如果有人已经登录,我希望该按钮更改为指向用户个人资料的链接。
我不知道这样做的正确方法是在 View 中放置一个 if 语句,它根据从 Controller 传递的数据呈现不同的 HTML,或者 Controller 是否需要决定用户是否登录,并将适当的数据结构传递给视图。在 CodeIgniter 中执行此操作的正确方法是什么?
在 Codeigniter 中,您可以将 if 和 else 语句放在视图中。
if($this->session->userdata('your_session_variable'))
{
?>
<a href="profile_page_link">Profile</a>
<?php
}
else
{
?>
<a href="login_page_link">Login</a>
<?php
}
控制器用于计算和操作数据并将结果传递给视图,视图获取结果并将其呈现为 HTML。
如果您应该if
在视图中使用语句来显示或隐藏某些标记,则可以!
但如果更改部分包含大量信息,我建议使用部分视图并将其内容作为变量传递给主视图。并在控制器中完成所有这些。
在 CodeIgniter 中做到这一点:
控制器:
class Foo extends CI_Controller {
public function bar()
{
// prevent getting error.
$data['partial'] = '';
// check if user is logged in.
if ($this->session->userdata('user_id') == TRUE) {
$data['partial'] = $this->load->view('partial/baz', '', TRUE);
} else {
$data['partial'] = $this->load->view('partial/qux', '', TRUE);
}
$this->load->view('my_view', $data);
}
}
假设: user_id
在用户登录时在 CI 会话中设置。
看法:
<?php echo $partial; ?>
显然可以在 View 中嵌入逻辑,但 MVC 的想法是将所有逻辑都放在 Controller 中,所以我猜你会违背使用 Codeigniter 的目的。视图通常用于呈现控制器传递的内容。
这适用于任何基于 MVC 的应用程序,而不仅仅是 CI。
由于您正在更改view
向用户显示的方式,因此在您的view
. 但是,对此的逻辑应该在您的controller
. 例如,您的控制器可能类似于:
class x
{
public function index()
{
if($session->get('logged_in') === true){
// send a variable to the view
}
}
}
那么在你看来,
<?php if(isset($logged_in)): ?>
Hey User! <a href="">logout</a>
<?php else: ?>
<a href="">login here</a>
<?php endif; ?>
显然,在每个控制器方法中这样做会很烦人,因此请查看这个问题,这将使您避免重复代码。