Je crée une application en utilisant la documentation fournie par le framework KeystoneJS. Ainsi, dans mon application, j'ai deux tables, l'une est Users et l'autre est Posts. Donc, je me demande, lorsque je crée une publication en me connectant à la zone d'administration, il y a un champ avec une colonne de clé étrangère, et ce champ est vide pour être rempli avec la valeur de clé étrangère de la table des utilisateurs. Ainsi, lorsque je crée une nouvelle publication en utilisant l'identifiant de l'utilisateur connecté dans KeystoneJS, je souhaite que le système ajoute automatiquement la valeur de la clé étrangère à auteur.
J'ai donc cherché partout une solution mais je n'ai pas trouvé de solution adaptée.
Si quelqu'un a des idées à ce sujet, il serait grandement apprécié qu'il puisse répondre à cette question.
Merci
Avez-vous vu l'Exemple de blog contrôlé ?
Il a une liste similaire à votre projet :
Posts
和Users
,可以是Contributors
或Moderators
。在你的情况下,贡献者/管理员的区别并不重要,你会对Post
列表上的钩子感兴趣,特别是resolveInput.create
Hooks, elle ressemble à ceci :Selon Documentation :
C'est donc notre opportunité de modifier la valeur avant de sauvegarder, notamment en remplissant ou en forçant une valeur comme votre champ
Post.author
.
, mais contient généralement des informations sur le informations actuelles sur l'utilisateur. Dans cet exemple, si l'utilisateur connecté est un contributeur, nous obtenons son identifiant de contributeur à partir deresolveInput
Obtient l'objetcontext
resolveInput
获取context
对象,其中包括对session
对象的引用。该对象的内容由你的会话存储函数决定,但通常包含有关当前用户的信息。在这个示例中,如果登录的用户是贡献者,我们从context.session?.contributor?.id
获取他们的贡献者ID,并将其保存到createdBy
字段。同时,createdAt
, qui inclut la référence A à l'objetsession
. Le contenu de cet objet est déterminé par votre fonction de stockage de sessioncontext.session?.contributor?.id
et l'enregistrons danscreatedBy
Field. Dans le même temps, le champcreatedAt
est également défini sur la date et l'heure actuelles.resolvedData
对象和钩子想要进行的任何其他更改)。另一种方法是在字段级别添加resolvedData
函数,但这样我们就需要两个单独的函数 - 一个用于createdAt
,另一个用于createdBy
Notez que puisque ce hook est configuré au niveau de la liste, il doit renvoyer des données pour l'élément entier (en gros - chaque fonction renvoie une valeur unique. Pour plus d'informations sur cette différence, consultez le Hooks GuideDe plus, il est important de ne pas confondre les hooks avec le Contrôle d'accès
de la liste.access
- c'est-à-dire si un contributeur doit être autorisé à créer une publication en premier lieu. Dans cet exemple, le contrôle d'accès est configuré séparément, dans la configurationUne dernière remarque : au moment de la rédaction, la documentation de l'API Hooks
). Il s'agit simplement d'une amélioration récente de la syntaxe, cela ne change pas la façon dont les hooks sont utilisés. Si vous utilisez uniquement l'API dans la documentation, le code ci-dessus peut s'écrire ainsi : 🎜resolveInput
钩子(在列表和字段级别),但没有将其分解为不同的操作(即resolveInput.create
和resolveInput.update
couvre