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,所以它没有你对我说,你可以有这样的条件观点。这是我愿意在观点中使用条件的程度。我根本不打算把任何业务逻辑放在那里。