J'ajouterai de nouveaux fichiers multimédias dans D8 par programme, comment puis-je déterminer ce que le fid doit être pour chacun? comment puis-je mettre le contenu réel du fichier dans le type de support?
voici mon code
$file_name=$file_info['file_name'];
$file = file_get_contents($fullpath."/".$file_name); // string
$filesaved = file_save_data($file, 'public://'.$file_directory_name."/".$file_info['file_name')',FILE_EXISTS_REPLACE);
$fid = ???;
$static_media = Media::create([
'bundle' => 'document',
'uid' => '1',
'langcode' => Language::LANGCODE_DEFAULT,
'status' => Media::PUBLISHED,
'your_image_field_name_here' => [
'target_id' => $fid,
'alt' => t('foo'),
'title' => t('bar'),
],
]);
$static_media->save();
Essayer
$filesaved = file_save_data($file, 'public://'.$file_directory_name."/".$file_info['file_name']), 'FILE_EXISTS_REPLACE');
$fid = $filesaved->id;
file-> id est l'id if file que vous pouvez utiliser comme référence d'entité target_id (je veux dire champ de fichier).
et un bon exemple comment enregistrer et joindre un fichier à Node
use \Drupal\node\Entity\Node;
// Create file object from remote URL.
$data = file_get_contents('https://www.drupal.org/files/druplicon.small_.png');
$file = file_save_data($data, 'public://druplicon.png', FILE_EXISTS_REPLACE);
// Create node object with attached file.
$node = Node::create([
'type' => 'article',
'title' => 'Druplicon test',
'field_image' => [
'target_id' => $file->id(),
],
]);
$node->save();
Que faire si le fichier est déjà présent dans votre système de fichiers local et que vous souhaitez le joindre à un nœud existant? Voici également un exemple:
use \Drupal\node\Entity\Node;
use \Drupal\file\Entity\File;
// Create file object from a locally copied file.
$uri = file_unmanaged_copy('public://source.jpg', 'public://destination.jpg', FILE_EXISTS_REPLACE);
$file = File::Create([
'uri' => $uri,
]);
$file->save();
// Load existing node and attach file.
$node = Node::load(1);
$node->field_image->setValue([
'target_id' => $file->id(),
]);
$node->save();
Et enfin, que faire si vous souhaitez coller un fichier d'espace réservé sur un nœud? Merci à Drupal 8, c'est trop facile:
use \Drupal\node\Entity\Node;
$node = Node::create([
'type' => 'article',
'title' => 'Generated image test',
]);
$node->field_image->generateSampleItems();
$node->save();
file_save_data renvoie un objet fichier lors d'une sauvegarde réussie. Cet objet doit être une instance de FileInterface .
En tant que tel, alors vous pouvez simplement faire:
$fid = $filesaved->id();
La fonction file_save_data()
renvoie une entité de fichier. Je suppose donc que vous avez besoin de $filesaved->fid->value
. Et $filesaved->id()
renvoie le même résultat.