Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 帮助合理组织控制器_Php_Model View Controller_Oop - Fatal编程技术网

Php 帮助合理组织控制器

Php 帮助合理组织控制器,php,model-view-controller,oop,Php,Model View Controller,Oop,我正在使用MVC结构开发一个网站。我的模型将代表站点中的所有数据,但我正在努力确定一个好的控制器结构。该网站将允许用户登录/注册并在多个页面上查看个人数据,但仍然可以访问公共页面,例如常见问题解答、联系页面等 这就是我现在拥有的 处理主模板显示的模板控制器。无论您是否登录,网站的基本模板都将保持不变 扩展模板控制器并处理基本身份验证的主网站控制器。如果用户已登录,则会从构造函数中调用user::control_panel()方法,从而构建控制面板,该控制面板将在整个经过身份验证的会话中出现。如果

我正在使用MVC结构开发一个网站。我的模型将代表站点中的所有数据,但我正在努力确定一个好的控制器结构。该网站将允许用户登录/注册并在多个页面上查看个人数据,但仍然可以访问公共页面,例如常见问题解答、联系页面等

这就是我现在拥有的

处理主模板显示的模板控制器。无论您是否登录,网站的基本模板都将保持不变

扩展模板控制器并处理基本身份验证的主网站控制器。如果用户已登录,则会从构造函数中调用user::control_panel()方法,从而构建控制面板,该控制面板将在整个经过身份验证的会话中出现。如果用户未登录,则加载不同的视图,而不是控制面板,例如使用登录表单。所有受保护/公共页面相关控制器将扩展网站控制器

用户主页有许多我想显示的小部件,我通过一个家庭控制器来扩展网站控制器。此控制器通过以下静态调用生成这些小部件:

$this->template->content->featured_pet = Pet::featured(); 
$this->template->content->popular_names = Pet::most_popular(); 
$this->template->content->owner_map = User::generate_map(); 
$this->template->content->news = News::snippet(); 
我想我不确定的第一件事是,上面对控制器(如Pet和User)的静态调用是否可以保持静态-这些静态方法将返回加载到主模板中的视图。这是我过去做事情的方式,但我很好奇这是否是一种明智的方法。登录用户的其他受保护页面将类似于主控制器

静态页面将由页面控制器处理,该控制器还将扩展网站控制器,以便它知道用户控制面板或登录表单是否应显示在模板的左侧。受保护的仅成员页面将不会路由到页面控制器,此控制器将仅处理公开可用的页面

目前我遇到的一个问题是,如果公共页面和受保护页面都扩展了网站控制器,我如何避免无限循环?例如,我们的想法是网站控制器应该处理身份验证,然后重定向到请求的控制器(URL),但这将导致无限重定向循环,所以我需要想出一个更好的方法来处理这个问题


总而言之,这种设置有意义吗?!感谢您的反馈。

我的控制器布置如下:

/**
* Global controller
*/

class MY_Controller extends Controller {

 function __construct() {
  parent::__construct();

  // Load templates, modules etc
 }
}


/**
* Admin controller
*/


class Admin_Controller extends MY_Controller {

 function __construct() {
  parent::__construct();

  // Check admin is logged in
 }
}

/**
* User controller
*/

class User_Controller extends MY_Controller {

 function __construct() {
  parent::__construct();

  // Check user is logged in

 }
}

任何用户页面都将扩展用户控制器,而管理员页面将扩展管理员控制器,这样您就可以轻松地进行身份验证,而不需要太多麻烦,并将其保持独立。

谢谢,这是有道理的,这就是我通常用不同的前端和后端来设计应用程序的方式——这次我被登录用户和公共用户都可以访问相同页面的事实弄糊涂了,所以我尝试使用网站控制器来处理这个问题。但是,我应该在这里清楚地处理这两种用户类型,在网站中没有任何交叉。我在我的家庭控制器中进行的静态调用类型在负责生成要通过视图输出的内容的控制器的上下文中是有意义的吗?嗯,再想一想,我就有一个问题了,因为我不能按URL将管理和公共部分分开,所以我需要一个全局检查来查看它是否是登录的成员。例如,如果一名成员正在访问公共主页,并且已经登录,那么我必须进行检查,以便知道他应该看到的主页是公共主页还是受保护的主页。这让我又回到了原点!