我正在从一本书(Yii 2和PHP的Web应用程序开发)学习Yii。我遇到了如下代码:
if ($model->load(Yii::$app->request->post()) && $model->save()) {...}
但是这段代码似乎功能相同:
if ($model->load($_POST && $model->save()) {...}
使用两个之间有什么实际区别吗?
答案 0 :(得分:2)
使用request
对象的一个重要原因是 testability :
执行控制器操作的功能测试应该是测试套件的一部分。对于简单的场景,例如“如果我打开/event/calendar
页面,我会得到一个事件列表”,您可以创建模拟请求,让框架处理它们,并检查结果¹。您可以通过直接将值分配给$_GET
,$_POST
和其他超级全局来进行此测试......但使用框架的request
对象要容易得多,并且框架通常对这种情况有很好的支持。
例如:
¹:对于涉及用户互动的更复杂的场景,这还不够,你需要像Selenium这样的工具:http://www.yiiframework.com/doc/guide/1.1/en/test.functional