在MVC中处理$ _POST数据的正确方法是什么?
在PHP系统中,我有一个常见的MVC情况:Controller
从View
包含的$_POST
数据中接收请求。现在,我有三种方法来处理数据:
a)Controller
仅调用Model
和Model
处理$_POST
数据。
b)在Controller
变换的$_POST
数据转换成变量,并将它们传递到Model
。
c)Controller
将$_POST
数据转换为Model
的域对象,并将该对象仅传递给Model
。
目前,我正在使用选项A,但是我认为这是错误的,因此我正在考虑使用选项C。
因此,根据MVC,处理$_POST
数据的正确方法是什么?
目前,我没有使用任何MVC框架。
通常,相同的Controller
请求处理浏览器,Web服务,脱机应用程序等的请求,或者每个请求都有它自己的请求Controller
?
回答:
最好的选择是使用 方法,并进行一些更改。
我会这样写:
public function postLogin( $request ){
$service = $this->serviceFactory->build('Recognition');
$service->authenticate( $request->getParam('username'),
$request->getParam('password') );
}
// Yes, that's the whole method
如果您已使用Request
实例(例如实例)来抽象用户输入,则实际上无需创建变量。
另外,您可能希望
Request::getParam()
用类似的方法替换该方法Request::getPost()
-尽管我得出的结论是,在结构正确的应用程序中,GET
and
POST
参数不应共享相同的名称。
在serviceFactory
你的代码片段看到是,你在这两个控制器和视图实例注入的对象。它可以让您在控制器和视图之间共享相同的服务实例。
它负责创建服务
(其中将包含应用程序逻辑,而将域业务逻辑保留在
域对象中),这有助于您从表示层隔离域实体和存储抽象之间的交互。
关于其他选项:
Controller仅调用Model,而Model处理$ _POST数据。
在MVC和MVC启发的设计模式中,模型应该既不了解用户界面,也不了解整个表示层。在$_POST
PHP中的变量是一个超全局变量。
如果将其用于模型层,则代码将绑定到Web界面,甚至是特定的请求方法。
控制器将$ _POST数据转换为模型的对象,并将该对象仅传递给模型
不能完全确定您的意思。似乎您在谈论抽象的实例化,其中将包含用户的请求。但是在这种情况下,控制器将负责所述结构的实例化/创建,这将违反SRP。
结束语:
您必须了解的一件事是,在基于Web的MVC应用程序的上下文中,应用程序的 用户
是浏览器。不是你。浏览器发送请求,该请求由路由机制处理并由控制器分发。并且view 对您的浏览器 产生响应。
另一件事是:模型既不是类也不是对象。
回答:
通常,相同的Controller处理来自浏览器,Web服务,脱机应用程序等的请求,或者每个控制器都有自己的Controller?
您应该能够使用一个控制器来处理所有形式的应用程序。但这只是在一定条件下,您实际上在所有3个用例中都使用相同的应用程序。
这样做有两个条件:
- 您需要抽象该
Request
控制器接收到的实例 - 该视图应在控制器外部实例化
这样,您可以使一个应用程序满足所有要求。每个变体都有不同的唯一之处是引导阶段,在该阶段您可以创建Request
实例并选择正确的视图。
在您所描述的情况下,变化的部分实际上是视图,因为可以预期REST或SOAP服务将产生与普通Web应用程序不同的响应。
以上是 在MVC中处理$ _POST数据的正确方法是什么? 的全部内容, 来源链接: utcz.com/qa/412154.html