Php 将条件逻辑放在CodeIgniter视图上可以吗?
所以我现在处于进退两难的境地。我想在我的站点上实现一个登录按钮,当没有用户登录时会显示该按钮。但是,如果有人已经登录,我希望该按钮更改为指向用户配置文件的链接Php 将条件逻辑放在CodeIgniter视图上可以吗?,php,codeigniter,templates,Php,Codeigniter,Templates,所以我现在处于进退两难的境地。我想在我的站点上实现一个登录按钮,当没有用户登录时会显示该按钮。但是,如果有人已经登录,我希望该按钮更改为指向用户配置文件的链接 我不知道这样做的正确方法是在视图中放置if语句,它根据从控制器传递的数据呈现不同的HTML,还是控制器需要确定用户是否登录,并将适当的数据结构传递给视图。在CodeIgniter中,哪种方法是正确的?这适用于任何基于MVC的应用程序,而不仅仅是CI 由于您正在更改视图向用户显示的方式,因此在视图中添加条件并没有错。但是,此逻辑应在控制器中
我不知道这样做的正确方法是在视图中放置if语句,它根据从控制器传递的数据呈现不同的HTML,还是控制器需要确定用户是否登录,并将适当的数据结构传递给视图。在CodeIgniter中,哪种方法是正确的?这适用于任何基于MVC的应用程序,而不仅仅是CI 由于您正在更改
视图
向用户显示的方式,因此在视图
中添加条件并没有错。但是,此逻辑应在控制器中执行。例如,您的控制器可能看起来像:
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; ?>
嘿,用户!
显然,在每个controllers方法中这样做会很烦人,所以请检查这个问题,它将允许您避免重复代码。控制器用于计算和操作数据,并将结果传递给视图,而视图则获取结果并将其呈现为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);
}
}
<?php echo $partial; ?>
假设:用户id
在用户登录时在CI会话中设置
查看:
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);
}
}
<?php echo $partial; ?>
在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
}
if($this->session->userdata('your\u session\u变量'))
{
?>
显然,在视图中嵌入逻辑是可能的,但MVC的想法是将所有逻辑都放在控制器中,因此我猜您将无法达到使用Codeigniter的目的。视图通常用于呈现控制器传递的内容。您会不断混淆视图。您可能会从中受益学习一些,而不是像宗教一样遵循CI。@tereško我根本不打算使用模板,但我知道它们在这种情况下是如何有用的。你已经在使用模板了。你至少可以看看代码并与codeigniter的“视图”相比较…但话说回来,如果人们能够理解CI是如何编写的,他们就不会使用它了。我正在讨论是使用这种方法还是使用Hashem的方法。我想这两种技术在某些情况下都可以工作。这正是我要找的,非常感谢。我昨天刚开始使用CodeIgniter,所以它没有你对我说,你可以有这样的条件观点。这是我愿意在观点中使用条件的程度。我根本不打算把任何业务逻辑放在那里。