所以我们正在Symfony2 中开发一个Web 应用程序(简短的社论:Symfony2 太棒了),沿着SOA 的思路。所有数据都在我们的 jQuery 驱动的前端和格式化为 la JSON 的 Symfony2 后端之间来回传输,这就是问题所在。
Symfony2 提供了一个强大的安全系统,但它似乎取决于“安全层”拦截表单提交并使用表单编码的 POST 数据来处理身份验证尝试。这对我们的应用程序来说是有问题的,因为我们只使用 JSON。从我的立场来看,对除身份验证之外的每个请求和响应都使用 JSON 是......坦率地说,布尔表。难闻的气味,坏的juju,不管你怎么称呼它。
现在,Symfony2 允许创建事件侦听器,这些侦听器连接到与请求的生命周期和完整响应相关的一系列事件。我们使用其中一个钩子来解码每个 POST 请求附带的 JSON,以便相关控制器只需要担心直接使用 php 数组,而无需进行任何解码或反序列化或其他操作。
所以我们问题的症结在于“安全层”期望它从表单提交中获得表单编码的 POST 数据(通常在后端首先服务的页面上)。我们准备为它提供一个从 JSON 化数据创建的 PHP 数组。那怎么办?我们应该吗:
- 创建一个自定义身份验证服务,用于处理由 le JSON 制成的数组?
- 调整我们的请求挂钩以检查每个请求的目标 uri,然后将请求的 JSON 按摩成“安全层”期望的表单编码字符串?
- 调整“安全层”以便它可以使用 JSON 转换的 php 数组?