1

我已经看到一些网站讨论如何制作一个登录功能以使其在每次页面加载后自动运行,而无需在每个控制器中调用该功能,并且想知道是否有人可以将我指向其中一个,因为我输了我看到的几个链接。

我发现这个网站讨论了如何实现这一目标:

philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY

我创建了一个扩展 CI_Controller 的 MY_Controller 以及扩展了 MY_Controller 的 Frontend_Controller 来控制我的网站的主站点,我还有一个 Backend_Controller 来控制我正在创建的 CMS。

我还有一个扩展 Backend_Controller 的登录控制器。我的问题是,如果我想为整个后端区域运行 if 语句以查看是否有会话变量 isset,如果有,则检查该值是否为数字。如果是,则让他们重定向到登录名,如果不是,则让他们重定向到控制面板控制器,该控制器也扩展了 Backend_Controller。我是否在 Backend_Controller 中执行此 if 语句?

这是我想到的。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Backend_Controller extends MY_Controller
{
    public function __construct()
    {
        parent::__construct(); 

        if (!!isset($this->session->userdata('xtr'))) && (!is_integer($this->session->userdata('user_variable_id'))))
        {
            redirect('login');
        }
    }
}  

这是实现这一目标的正确方法和正确的地方吗?如果是这样,我会做任何特定于登录控制器或其他控制器来管理用户的事情吗?

或者有更好的想法来解决这个问题?

4

1 回答 1

1

这个问题对于codeigniter来说真的不是古怪/独特的,这更像是一个面向对象/基于类的问题,而不是其他任何问题。意见问题最好问如何从另一个类扩展一个类,以及我实际上可以在我的类的构造函数中放入什么。但话虽这么说,但更多的是静音点,也许我只是挑剔的意思。那

在这方面您拥有构造函数/解构函数的对象/类。您通常可以放置变量和函数调用。但我不确定 if 语句是否会起作用,也许如果你在类中创建一个包含相同内容的函数/方法if-else,并让它相应地执行你的命令,它会比在构造中使用它更好。

但是,我将根据我前一段时间读到的内容进行,从那时起发生了很多变化。

我会说看看

我可以在 PHP 的构造函数中添加什么?

http://php.net/manual/en/language.oop5.decon.php

这可能比我目前可以更好地帮助你,因为我已经有一段时间没有完成一个完整的课程了,我创建的方法比现在任何一天都多,我知道从 PHP v 5.3.2 到 5.3。 3 由于与旧 php 和新版本的兼容性,整个逻辑的工作方式发生了一些变化。所以总而言之,我想这更多的是一种提供指导的方式,而不是直接回答这个问题。

我将依靠可能的引擎盖,最有可能取决于您的 PHP 版本的机会是 if-else,在构造中不是您想要做的事情,而是从构造中调用一个方法。

于 2012-12-10T20:35:06.207 回答