php - 如何处理删除 JSON :API? 中的关系

标签 php rest cakephp ember.js json-api

我们目前正在使用 Ember 和 CakePHP 开发单页应用程序。我们使用 JSON:API传输数据的格式。

但是,在创建关系时,客户端会传输 id。删除关系时,Ember 将 id 作为 null 传输。

但是在服务器端,null 是不可捕获的,所以我们使用一个额外的查询参数来指示它应该被删除。

我们如何使用 CakePHP 实现这一点(捕获 null 值),同时仍然遵守 JSON:API 规范?

或者,有没有其他方法可以删除与 JSON:API 规范或使用 Ember 的关系?

最佳答案

我很确定这最好在 PHP 方面解决,所以我相信其他人会更适合回答这个问题。我可以从 Ember 方面回答。

我想说的第一件事是@handlebars 在他们的评论中是正确的:要点是你不需要为每个请求使用 ember-data 如果你不想到。

我们的意思是,您可能已经遇到这样一种情况,您可以使用以下方法通过 ember-data 获得一堆模型:

this.get('store').findRecord('post', 1);

您可能已经建立了一堆关系。如果你想删除一个关系,而你的后端 API 无法遵循 JSON:API specification然后您可以创建一个特定的端点来完成这项工作。

然后要对特定端点执行 DELETE 请求,您可以使用以下代码:

import Controller from '@ember/controller';
import { inject as service } from '@ember/service';

export default Controller.extend({
  ajax: service(),
  actions: {
    deleteRelationship(id) {
      this.get('ajax').request(`/posts/${id}/author`, {
        method: 'DELETE',
      });
    }
  }
});

此代码使用 ember-ajax直接调用网络。

注意:您必须非常小心地使用这种方法。这将意味着您的后端将与 ember-data 不同步,并且您必须在执行删除后立即在前端重新加载 post 模型:

store.findRecord('post', 1, { reload: true });

由于一些奇怪的同步行为,我强烈建议您更新后端以能够遵循 JSON:API 规范并接受空值以删除关系。

此外,如果您想看到我们讨论在视频中回答这个问题,您可以在此处查看 https://youtu.be/WKfq3dS73xg在这里 https://youtu.be/ExUtgatzZeI?t=25m54s

关于php - 如何处理删除 JSON :API? 中的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50167161/

相关文章:

php - 将 SimpleXMLElement 对象数组导出到 MySQL 数据库

php - 无法读取来自 RabbitMQ 的所有消息

php - 并非所有字段都插入到 MySQL 表中

rest - 具有ravendb id的ServiceStack路由

Cakephp - 使用模型回调自动运行应用程序模型回调

file - Cakephp 2.3.x发送文件并强制下载mp4文件

php - Google Charts API,包含 4 个图的散点图,每个图有 4000 个点,可杀死 HTTPD

rest - Dart 将 SSL 证书和 key 添加到 HttpClient

python - 在 python 中使用请求进行curl命令复制

php - 带下划线的 CakePHP 3 动态查找器