web-dev-qa-db-fra.com

Comment attacher par programme un fichier à un champ de fichier dans un nœud?

J'ai un type de contenu personnalisé avec un champ de fichier. J'essaie de joindre un fichier téléchargé via un formulaire personnalisé au type de contenu personnalisé. Je suis capable de charger le nœud et de mettre à jour toutes les autres valeurs du noeud, à l'exception du champ Fichier.

J'ai trouvé RealityLoop: joindre de manière programmée des fichiers à un nœud dans Drupal 8 , mais cela ne semble pas fonctionner.

C'était ce qui a été suggéré dans le lien ci-dessus

$node = Node::create([
  'type' => 'article',
  'title' => 'Druplicon test',
  'field_image' => [
  'target_id' => $file->id(),
  ],
]);
$node->save();

C'est ce que j'ai essayé à l'intérieur submitForm

$fid = $form_state->getValue('file_field_name')[0];
$file = File::load($fid);
$file->setPermanent();
$file->save();
$node = Node::load($nid);     
$node->set('file_field_in_node', $file->id);
$node->save();

C'était définissant le fichier comme permanent dans la table des fichiers, mais le nœud n'avait pas le fichier.

J'ai aussi essayé de sauver avec

$node->set('file_field_in_node', $file);

Cela n'a pas aidé non plus. Je suis également curieux de savoir quel est le fichier/la fonction qui gère la fonction définie pour le champ Fichier.

Mise à jour:

[Résolu] Je ne sais pas ce qui n'allait pas plus tôt. Les deux approches semblent fonctionner correctement maintenant. Donc, définir le fichier_id ou l'objet de fichier dans le champ Fichier du nœud semblent enregistrer correctement le nœud avec le fichier attaché à celui-ci.

2
anoopjohn

Si vous utilisez le module de base multimédia pour gérer des fichiers, vous avez déjà téléchargé votre fichier et vous souhaitez l'attacher à classer par exemple field_file

    $node = Node::load(NID);
    $node->set('field_file' , ['target_id' => FID]);
    $node->save();

Remarque: FID est votre identifiant de fichier.

1
berramou