|
|
1
9
每次渲染表单时都会生成Csrf值。表单的隐藏元素将预先填充该值。此值也会存储在会话中。 提交表单后,验证会检查表单中发布的值是否存储在会话中,否则验证失败。至关重要的是,表单必须在测试期间呈现(这样它就可以生成隐藏值并将其存储到会话中),然后我们可以从呈现的html中提取隐藏值,稍后我们可以将隐藏哈希值添加到我们的请求中。 考虑这个例子:
|
|
|
2
3
正确的哈希存储在会话中,哈希表单元素有一个Zend_session_Namespace实例,其中包含哈希的命名空间。 要对元素进行单元测试,您可以将元素中的Zend_Session_Namespace实例(使用setSession)替换为您自己创建的包含正确哈希值的实例(哈希值存储在键“hash”中) 有关更多示例,您可能可以查看Zend_Form_Element_Hash类的Zend Framework单元测试。我想他们也必须处理这个问题。 |
|
|
3
1
我在我的Apachevhost文件中设置了一个环境变量,它告诉代码它运行在哪个服务器上: 开发、分期或生产 vhost文件的行是:
然后,我只是让我的表单对适当的环境做出反应:
我对很多东西都使用同样的技术。例如,如果它是dev,我会将所有发出的电子邮件重定向给我,等等。 |
|
|
4
1
我回答了一个与这个类似的问题。我也把我的答案放在这里,以防将来对任何人有帮助。 我最近发现了一种用哈希元素测试表单的好方法。这将使用一个模拟对象来删除哈希元素,你不必担心它。你甚至不必这样做session_start或任何事情。你也不必“预渲染”表格。 首先创建一个“存根”类,如下所示
然后,将以下内容添加到表单的某个位置。
set方法实际上只是用于测试目的。在实际使用中,您可能根本不会使用它,但现在在phpunit中,您可以完成以下操作。
你必须创建自己的存根。你不能只调用phpunit方法
使用这种方法,您甚至不需要连接到数据库来测试您的表单!我花了一段时间才想到这一点。
如果你愿意,你可以推
如果你觉得这有用,或者你使用它,请告诉我。 |
|
|
5
1
ZF2的解决方案是在测试中创建表单,并从csrf表单元素中获取值:
|
|
|
mya · 我从表单中只得到一个字段的参数 9 年前 |
|
|
Anish Abraham · 如何在zend表单中添加数据掩码 10 年前 |
|
|
pia-sophie · 在引导中配置自动加载器失败 12 年前 |
|
|
Ashwini Agarwal · Zend文件元素的自定义装饰器 13 年前 |