ฉันมีสคริปต์แบบกำหนดเองที่นำเข้าเนื้อหาจากฐานข้อมูลภายนอก
ฉันกำลังแนบไฟล์โดยใช้รหัสที่กำหนดเองด้านล่าง
$file = ไฟล์::สร้าง([
'ชื่อไฟล์' => $new_filename,
'uri' => $folder_uri '/' . $new_filename,// ส่วนตัว://my_content_type/<subdir>/filename.pdf
]);
$file->setPermanent();
$file->save();
เมื่อส่วนด้านบนเสร็จสมบูรณ์ ให้แนบไฟล์นั้นกับโหนดใหม่โดยใช้โค้ดที่กำหนดเองด้านล่าง
$storage_handler = \Drupal::entityTypeManager()->getStorage("โหนด");
$ข้อมูล = [
'type' => 'my_content_type',
'title' => 'ชื่อเรื่อง',
'สถานะ' => 1,
...
'field_attach' => ['target_id' => $file->fid->value],
...
];
$node = $storage_handler->create($data);
$node->save();
เมื่อฉันแก้ไขโหนดเดียวกัน ฉันเห็นไฟล์ที่ถูกต้องแนบมา แต่ในขณะที่เปิดในการแสดงตัวอย่าง ฉันได้รับ "Access Denied" แม้ว่าฉันจะเข้าสู่ระบบในฐานะผู้ดูแลระบบก็ตาม
แม้ว่าสนาม field_attach
เป็นหลายไฟล์ และถ้าฉันแนบไฟล์อื่นด้วยตนเองจากหน้าแก้ไขและบันทึก ฉันจะสามารถดูตัวอย่างได้อย่างถูกต้อง
แก้ปัญหา:
นี่คือส่วน devel สำหรับโหนด:
[field_attach] => อาร์เรย์
(
[x-default] => อาร์เรย์
(
[0] => อาร์เรย์
(
[target_id] => 1876 // ดูตัวอย่างไม่ได้ การเข้าถึงถูกปฏิเสธ
[จอแสดงผล] => 1
[รายละเอียด] =>
)
[1] => อาร์เรย์
(
[target_id] => 1878 // สามารถดูตัวอย่างได้
[จอแสดงผล] => 1
[รายละเอียด] =>
)
)
)
ในฐานข้อมูลแต่ละไฟล์มีค่าเหมือนกัน:
# เลือก * จาก file_usage โดยที่ fid in(1876, 1878)\G
*************************** 1. แถว ******************** *******
รหัส: 1876
โมดูล: ไฟล์
ชนิด: โหนด
รหัส: 92
นับ: 1
*************************** 2. แถว ******************** *******
รหัส: 1878
โมดูล: ไฟล์
ชนิด: โหนด
รหัส: 92
นับ: 1
2 แถวในชุด (0.000 วินาที)
# เลือก * จาก file_managed โดยที่ fid in(1876, 1878)\G
*************************** 1. แถว ******************** *******
รหัส: 1876
รหัส: 876c1bd1-566c-4d6b-a767-4925d75b593f
รหัสภาษา: it
ไอดี: 1
ชื่อไฟล์: first_file.pdf
ยูริ: ส่วนตัว://my_content_type/201211/first_file.pdf
filemime: ใบสมัคร/pdf
ขนาดไฟล์: 140982
สถานะ: 1
สร้าง: 1651744379
เปลี่ยนแล้ว: 1651744379
*************************** 2. แถว ******************** *******
รหัส: 1878
รหัส: 4c26c169-3e92-4254-af49-e5b203caf4c6
รหัสภาษา: it
ไอดี: 1
ชื่อไฟล์: second_file.pdf
ยูริ: ส่วนตัว://my_content_type/202205/first_file.pdf
filemime: ใบสมัคร/pdf
ขนาดไฟล์: 140982
สถานะ: 1
สร้าง: 1651745721
เปลี่ยนแล้ว: 1651745725
2 แถวในชุด (0.000 วินาที)
สิทธิ์จะเหมือนกันสำหรับไดเร็กทอรีและไฟล์
สิ่งที่แตกต่างจากการแนบด้วยตนเองและการแนบโดยทางโปรแกรม
หายไปเพื่อตั้งค่าบางอย่าง?
ขอบคุณล่วงหน้า.