用MVC调用控制器的最佳方式是什么?


What's the best way to call a controller with MVC?

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

尽管如此,我有一个"设计问题",如何调用控制器?

控制器,如检查用户是否点击了提交按钮的函数。

控制器示例:

$class->login($_POST['username'], $_POST['password']) .

我知道很多MVC框架和应用程序调用它的URL与$_GET参数,但我认为这是愚蠢的有一个方法或一个类为每个页面需要一个功能,如登录。

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

任何帮助都是感激的!

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

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

管理登录不应该是每个控制器的工作,只有一个控制器应该这样做,通常是前端控制器。任何控制器都应该能够在任何URL下加载,因为它是决定加载哪个控制器的前端控制器。子控制器不知道"为什么"他们正在加载,只知道他们正在加载以完成他们的任务。

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

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

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