我正在使用这种结构的MVC应用程序:
Request
V
FrontController <-> Router
V
Controller <-> Model
V
View
Run Code Online (Sandbox Code Playgroud)
我还需要在此结构中放置另外两个组件:
Authentification
:使用$_SESSION
全局变量记录用户;RBAC
:基于角色的访问控制,可以检查角色是否具有授予"ressource"(Controller
方法)的访问权限.每个用户都可以拥有任意数量的角色(他们也可以没有角色).
现在,我需要将这两个组件放在我的应用程序中,我需要它们能够:
User
未进行authed并且Request
需要User
执行authed ,则应将客户端重定向到登录页面;RBAC
看到authed User
没有一个角色具有授予执行方法所需的"ressource"访问权限的角色,那么仍然应该执行该Controller
方法,Controller
但知道该方法User
没有这样做的权限(示例:A User
撰写文章但没有权利发布它,因此文章将保存为草稿,并User
告知Moderator
必须发布它).我已经有一些想法可以找到它Authentification
,RBAC
但我不确定:
Authentification
可以进入FrontController
或者Router
;RBAC
可以进入FrontController
或Controller
.我看到有人把它RBAC
放在模型中,但我不明白为什么.
我想对这个问题有一些见解.我应该在哪里放置Authentification
和 …
我有一个 PHP 应用程序,它有一个路由器,它应该有两个默认处理程序401 Unauthorized
和404 Not Found
。
但也有可能没有为这两种情况设置处理程序。在这种情况下,我需要有一个默认响应,告诉Request Unhandled
我已将其设置为响应代码400 Bad Request
,但我觉得它不是真正合适的。
对于未处理的请求,我应该使用什么响应代码?
我有一个简单的PHP MVC框架,它以这种方式工作:
StaticFramework (1)
|
V
DIC (2)
|
V
HTTPRequest
|
V
App <-> Router
|
V
Controller <-> Model
|
V
View
|
V
HTTPResponse
Run Code Online (Sandbox Code Playgroud)
(1) StaticFramework
是一个静态的"前端控制器",它给出了App
它的默认依赖性(2) DIC
(依赖注入容器),它的工作方式与Pimple类似.可以访问容器以更改这些默认依赖项.例如,Router
类被注入App
了DIC
.
我有一个问题,因为它是一个MVC应用程序,我有3个重要的层:
注入View
很容易,因为它只是一个有一个render
呈现PHP或HTML文件的方法的类,所以我只需要View
在我的注入一个实例Controller
.
但注入Model
的Controller
似乎更难.每个Model
都是一个单独的类,所以我不能像我那样注入它View
.每个人Model
也可能需要其他依赖,例如a Database
或XML
类.
此外,我无法预测Controller
将需要哪些型号,因为它可能需要其中的几种,例如,ArticleController
需要ArticleModel
和UsersModel
. …
php model-view-controller dependencies dependency-injection inversion-of-control