【问题标题】:Short functions from a Codeigniter's libraryCodeigniter 库中的短函数
【发布时间】:2012-09-10 22:36:37
【问题描述】:

我在我的 Codeigniter 包中安装了一个 Tank Auth 库,问题是我不喜欢如何调用 is_logged_in 函数,因为它很长而且不太友好,因为我需要使用:

$this->tank_auth->is_logged_in()

每次我想检查用户是否登录... 那么有没有办法让它变短呢?我说的更短是指$this->logged();?

如果有人可以帮助我,我将不胜感激。

谢谢。

【问题讨论】:

    标签: php codeigniter tankauth


    【解决方案1】:

    进入tank_auth 库并定义一个新的公共函数:

    public function logged(){
        return $this->is_logged_in();
    }
    

    您现在可以通过$this->tank_auth->logged(); 访问它

    如果您想缩短 tank_auth 的名称,您必须重命名类和文件名。

    更新:

    更重要的问题是,你为什么这么多次调用它,以至于它变得很烦人?如果你的代码遵循 Don't Repeat Yourself (DRY) 原则,你应该只需要编写一次。

    查看 Phil Sturgeon 题为 Keeping It DRY 的博文。他将向您展示如何编写一个基础控制器,您的所有控制器都将从中继承。如果在基本控制器的构造函数中编写登录检查,则不必在每个控制器中都编写。

    【讨论】:

    • 我认为他们的意思是省略 ->tank_auth 部分。
    • 是的,我知道我可以在我的控制器中使用另一个功能,但我宁愿对更全局的东西感兴趣,因为我想对其他一些坦克身份验证功能做同样的事情。
    【解决方案2】:

    我反对这样做,因为您实例中的方法 logged() 缺乏上下文。但是,如果您想这样做,您可以编写一个具有logged() 方法的基本控制器,该方法最终返回$this->tank_auth->is_logged_in()。所有控制器都将从这个基本控制器继承,这不是一个坏主意。

    如果您使用库,则可以在其中实现类似的模式。

    【讨论】:

    【解决方案3】:

    如果您没有创建 TankAuth 库中的任何内容,您可能不想编辑它,因为这样做会影响库的可更新性。相反,您可以向控制器添加一个名为 logged 的方法,并让它与 Tank Auth 联系。不过,正如先前的答案所指出的,我会为您的函数选择一个更好的名称。

    创建或编辑您的控制器基类,使其具有如下内容:

    function is_logged() {
       return $this->tank_auth->is_logged_in();
    }
    

    那你可以这样称呼它:$this->is_logged();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多