2011-10-29 122 views
2

我对MVC架构相当陌生,但我很好地捡起它,让我自己的框架几乎完成。使用MVC调用控制器的最佳方式是什么?

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

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

实施例:

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

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

如何你们这样做吗?你有什么办法呢?

任何帮助表示赞赏!

回答

1

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

在我的框架中,我有“路线”有属性,其中之一是“需要登录”。前端控制器确定需要运行的“路线”/控制器,并检查该路线的先决条件,如登录要求。如果用户未登录,则加载登录“路由”/控制器而不是所请求的“路由”/控制器。如果登录成功,则将控制权传递给适当的“路由”控制器。

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

1

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

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

通常MVC网址遵循图案/Controller/Action/Id/etc

相关问题