【问题标题】:Is it OK to put conditional logic on CodeIgniter Views? [closed]可以在 CodeIgniter 视图上放置条件逻辑吗? [关闭]
【发布时间】:2013-06-26 10:03:36
【问题描述】:

所以我现在处于两难境地。我想在我的网站上实现一个登录按钮,该按钮在没有用户登录时出现。但是,如果有人已经登录,我希望该按钮更改为指向用户个人资料的链接。

我不知道这样做的正确方法是在视图中放置一个 if 语句,它根据从控制器传递的数据呈现不同的 HTML,或者控制器是否需要决定是否登录用户在与否,并将适当的数据结构传递给视图。在 CodeIgniter 中正确的方法是什么?

【问题讨论】:

  • 你一直在用 templates 混淆视图。您可能会从学习一些 basics 中受益,而不是像信仰宗教一样追随 CI。
  • @tereško 我根本不打算使用模板,但我知道它们在这种情况下如何有用。
  • 您已经在使用模板。您至少可以查看代码并与 codeigniter 的“视图”进行比较……但话又说回来,如果人们能够理解 CI 是如何编写的,他们就不会使用它。

标签: php codeigniter templates


【解决方案1】:

在 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
}

【讨论】:

  • 这是我愿意在视图中使用条件的程度。我根本不打算把任何业务逻辑放在那里。
【解决方案2】:

控制器用于计算和操作数据并将结果传递给视图,视图获取结果并将其呈现为 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; ?>

【讨论】:

  • 这正是我想要的,非常感谢。我昨天刚开始使用 CodeIgniter,所以我没有想到你可以有这样的条件视图。
【解决方案3】:

显然可以在 View 中嵌入逻辑,但 MVC 的想法是将所有逻辑都放在 Controller 中,所以我猜你会违背使用 Codeigniter 的目的。视图通常用于呈现控制器传递的内容。

【讨论】:

    【解决方案4】:

    这适用于任何基于 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; ?>
    

    显然,在每个控制器方法中执行此操作会让人厌烦,因此请查看this 问题,这将使您避免重复代码。

    【讨论】:

    • 我在争论是使用这种方法还是使用哈希姆的方法。我想这两种技术都可以在某些情况下工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    相关资源
    最近更新 更多