我们目前正在使用 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/