实施';登录';用PHP检查MVC?

实施';登录';用PHP检查MVC?,php,model-view-controller,session,authentication,controllers,Php,Model View Controller,Session,Authentication,Controllers,我知道有人问过类似的问题,但我一直在网上搜索,似乎找不到确切的答案 最常见的答案是将其放入控制器中。我喜欢stackoverflow的一个特别的解决方案,它有一个SessionController和NonSessionController,都扩展了主控制器,但是带有SessionController检查用户是否在调度之前登录 这是否意味着控制器看起来像这样 class SessionController { ... function view() { /

我知道有人问过类似的问题,但我一直在网上搜索,似乎找不到确切的答案

最常见的答案是将其放入控制器中。我喜欢stackoverflow的一个特别的解决方案,它有一个
SessionController
NonSessionController
,都扩展了主控制器,但是带有
SessionController
检查用户是否在调度之前登录

这是否意味着控制器看起来像这样

class SessionController
{
    ...
    function view()
    {
         //view thread stuff
    }

    function post()
    {
         if loggedin then
         {
              //post thread stuff
         }
    }
{
在这种情况下,看起来
NonSessionController
是无用的,并且该模型仅在控制器处理的每个操作严格针对用户或非用户时使用,这与本论坛示例不同


因此,我想我的问题是,在使用MVC时,控制器的一般概念是否是处理登录检查的最有效的方法?

我认为应该有一个控制器来检查会话和登录,另一个不检查

我将把登录检查放在会话控制器的构造函数中,这样每个扩展它的控制器都会检查登录

会话控制器看起来像

class SessionController
{
    public function __construct()
    {
       if ( ! AuthenticationHelper::isLoggedIn() )
       {
           // User is not logged in
           // Do something, maybe a redirect to login page
       }
    }
}
然后你可以像这样扩展控制器

class HomeController extends SessionController
{
    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        print "This page checks login status";
    }
}

我认为最好有一个控制器来检查会话和登录,另一个则不检查

我将把登录检查放在会话控制器的构造函数中,这样每个扩展它的控制器都会检查登录

会话控制器看起来像

class SessionController
{
    public function __construct()
    {
       if ( ! AuthenticationHelper::isLoggedIn() )
       {
           // User is not logged in
           // Do something, maybe a redirect to login page
       }
    }
}
然后你可以像这样扩展控制器

class HomeController extends SessionController
{
    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        print "This page checks login status";
    }
}

我会制作一个组件。如果您正在编写自己的MVC框架,那么看看您是如何实现的将是一件有趣的事情

但是,基本上您需要一个类来检查会话状态。但是,如果您将自己绑定到扩展一个用于登录的类和一个用于注销的类,我会觉得您有太多重复代码。我个人也不认为这很直观。我可能会忘记控制器是否应该扩展会话

实际上,我正在编写自己的MVC框架,并且已经考虑过如何稍微解决这个问题。我还没有达到实际实现代码的程度,所以这更像是一种工作理论

  • 有一个控制器基类。该类有一个属性,我们称之为
    $components
    。让我们把它做成一个数组,它可以保存你想在很多控制器中做的事情的类名,但实际上并不属于控制器本身

  • 因为我在调用请求的操作之前使用了,所以我将收集$components数组,并为每个条目加载相应的类文件

  • 在加载每个
    $component
    文件时,我将动态地将该组件对象添加到控制器属性中。因此,名为
    Session
    的组件可能引用名为
    SessionComponent
    的类,您可以在控制器中使用
    $this->Session->do_something()
    $this->SessionComponent->do_something()


  • 我有点把这个想法从我的脑子里扯了出来。我使用Cake作为我的PHP生产框架,我对正在开发的定制框架的许多想法显然是受Cake的启发。

    我想制作一个组件。如果您正在编写自己的MVC框架,那么看看您是如何实现的将是一件有趣的事情

    但是,基本上您需要一个类来检查会话状态。但是,如果您将自己绑定到扩展一个用于登录的类和一个用于注销的类,我会觉得您有太多重复代码。我个人也不认为这很直观。我可能会忘记控制器是否应该扩展会话

    实际上,我正在编写自己的MVC框架,并且已经考虑过如何稍微解决这个问题。我还没有达到实际实现代码的程度,所以这更像是一种工作理论

  • 有一个控制器基类。该类有一个属性,我们称之为
    $components
    。让我们把它做成一个数组,它可以保存你想在很多控制器中做的事情的类名,但实际上并不属于控制器本身

  • 因为我在调用请求的操作之前使用了,所以我将收集$components数组,并为每个条目加载相应的类文件

  • 在加载每个
    $component
    文件时,我将动态地将该组件对象添加到控制器属性中。因此,名为
    Session
    的组件可能引用名为
    SessionComponent
    的类,您可以在控制器中使用
    $this->Session->do_something()
    $this->SessionComponent->do_something()


  • 我有点把这个想法从我的脑子里扯了出来。我使用Cake作为我的生产PHP框架,我对正在开发的定制框架的很多想法显然都是受Cake启发的。

    如果您在SessionController中,那么您不需要检查每个函数的loggedin变量,您应该在构造函数或路由器中进行检查,如果你有足够的信心操纵。这样,如果用户未登录,SessionController文件和类将根本不会被加载。

    如果您在SessionController中,则不需要为每个函数检查loggedin变量,如果您有足够的信心进行操作,则应在构造函数或路由器中执行此操作。这样,如果用户未登录,则根本不会加载SessionController文件和类。

    对不起,没有英语:

    基本控制器

    class Controller{
    
    
    function handleLogin()
    {
        if(!Authentication::isLoggedIn())
        {
            //do stuff - redirect to login page?
        }
    }
    
    }