Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.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 什么';使用MVC调用控制器的最佳方式是什么?_Php_Model View Controller_Design Patterns_Architecture - Fatal编程技术网

Php 什么';使用MVC调用控制器的最佳方式是什么?

Php 什么';使用MVC调用控制器的最佳方式是什么?,php,model-view-controller,design-patterns,architecture,Php,Model View Controller,Design Patterns,Architecture,我对MVC体系结构相当陌生,但我很好地掌握了它,几乎完成了自己的框架 尽管如此,我遇到了一个“设计问题”,如何调用控制器 控制器,用于检查用户是否点击提交按钮 控制器示例: $class->login($\u POST['username'],$\u POST['password']) 我知道很多MVC框架和应用程序通过URL使用$\u GET参数调用它,但我认为为每个需要登录等功能的页面使用一个方法或一个类是愚蠢的 你们是怎么做到的?你的方法是什么 感谢您的帮助 您可能想要查找前端控制器概念(

我对MVC体系结构相当陌生,但我很好地掌握了它,几乎完成了自己的框架

尽管如此,我遇到了一个“设计问题”,如何调用控制器

控制器,用于检查用户是否点击提交按钮

控制器示例:

$class->login($\u POST['username'],$\u POST['password'])

我知道很多MVC框架和应用程序通过URL使用
$\u GET
参数调用它,但我认为为每个需要登录等功能的页面使用一个方法或一个类是愚蠢的

你们是怎么做到的?你的方法是什么


感谢您的帮助

您可能想要查找前端控制器概念(以及控制反转),您可能已经在以某种形式使用它,但可能不知道它。前端控制器分析URL和事物的当前状态,并确定要加载的控制器

在我的框架中,我有一些具有属性的“路由”,其中一个是“requirelogin”。前端控制器确定需要运行什么“路由”/“控制器”,并检查该路由的先决条件,如登录要求。如果用户未登录,则加载登录名“route”/controller,而不是请求的“route”/controller。如果登录成功,则控制权将传递给相应的“路由”控制器


管理登录不应该是每个控制器的工作,只有一个控制器应该这样做,通常是前端控制器。任何控制器都应该能够在任何URL下加载,因为它是决定加载哪个控制器的前端控制器。子控制器不知道加载的“原因”,只知道加载是为了完成其1项工作。

您可以拥有一个包含函数requireAccess($access\u level)的基本控制器。其他控制器将扩展此控制器。如果没有正确的访问级别,requireAccess()将重定向到登录页面

至于在MVC中使用GET变量进行干净URL的重定向,我不建议这样做。这可能会导致需要包含斜杠的变量时出现问题。相反,我们通常希望获取原始请求uri,并自己解析它

通常MVC URL遵循模式
/Controller/Action/Id/etc