Magento2.1.0 แสดงข้อผิดพลาดพารามิเตอร์ที่ต้องการ 'theme_dir' ไม่ถูกส่งผ่านในขณะบันทึกผลิตภัณฑ์ในผู้ดูแลระบบ


17

ฉันพบข้อผิดพลาดนี้พารามิเตอร์ที่จำเป็น 'theme_dir' ไม่ผ่านเมื่อฉันพยายามบันทึกผลิตภัณฑ์ในผู้ดูแลระบบ ฉันตรวจสอบการกำหนดค่าธีมที่กำหนดให้กับร้านค้า เมื่อเร็ว ๆ นี้ผมได้อัพเกรดจาก 2.0.7 ไป 2.1.0.Also ผมได้ตรวจสอบรูปแบบไดเรกทอรีregistration.phpไฟล์ที่มีอยู่ ทุกคนเจอปัญหานี้

คำตอบ:


42

ข้อผิดพลาดนี้ปรากฏขึ้นเมื่อคุณลบโฟลเดอร์แม่แบบซึ่งยังคงอ้างอิงอยู่ในฐานข้อมูล วิธีที่ง่ายที่สุดในการแก้ไขปัญหาที่มันเป็นไปที่ฐานข้อมูลและในตาราง 'ธีม' app/design/frontend/packageหาชื่อธีมที่ไม่อยู่ใน

DELETE การอ้างอิงถึงธีมที่หายไปจากตาราง


นี่ควรเป็นคำตอบที่ยอมรับได้
seanbreeden

ที่สมบูรณ์แบบ .. ทำงานเหมือนมีเสน่ห์
Zorox

นี่ควรเป็นคำตอบที่ยอมรับได้
Daan van den Bergh

2 บันทึกเป็นพิเศษในฐานข้อมูลของฉันฉันลบออก BUT ยังคงไม่ทำงาน
HaFiz Umer

10

ฉันสามารถยืนยันได้ว่าคำตอบของVu Anhใช้ได้ผล นี่คือคำอธิบายว่าทำไมสิ่งนี้จึงเกิดขึ้นเมื่อมีการบันทึกผลิตภัณฑ์แม้ว่าจะใช้ชุดรูปแบบที่ลบไปแล้วในที่นี้:

หลังจากบันทึกผลิตภัณฑ์แคชอิมเมจจะถูกสร้างใหม่สำหรับธีมทั้งหมด แต่ละชุดรูปแบบสามารถมีรูปแบบขนาดภาพของตัวเองกำหนดetc/view.xmlและสิ่งเหล่านี้ทั้งหมดจะถูกสร้างขึ้น

แต่แทนที่จะมองหาชุดรูปแบบที่กำหนดค่าไว้ในร้านค้าทุกแห่งวีโอไอพีจะผ่านธีมทั้งหมดในthemeตาราง

หากคุณถอนการติดตั้งธีมไม่ถูกต้องและเพิ่งลบไฟล์รายการที่ถูกโยงถึงหมายถึงพา ธ ที่ไม่มีอยู่และข้อยกเว้นที่อธิบายไว้จะถูกส่งออกไป


2

ฉันมีข้อผิดพลาดเดียวกันจำเป็นพารามิเตอร์ 'theme_dir' ไม่ผ่าน ฉันทำงานกับ 2.1.0 ตั้งแต่ต้นไม่ใช่การอัพเดท และฉันมีแอตทริบิวต์แบบกำหนดเองของผลิตภัณฑ์ "สไตล์"

ปัญหาเกิดขึ้นเมื่อฉันพยายามบันทึกภาพใหม่ในวัสดุ หากไม่มีภาพผลิตภัณฑ์จะได้รับการบันทึกตามปกติ

แก้ไขด้วยการแสดงความคิดเห็นข้อยกเว้นภายใต้ไฟล์:

vendor/magento/framework/view/design/Fallbck/Rule/Simple.php  

มันใช้งานได้สำหรับฉัน แต่ฉันคิดว่ามันเป็นแฮ็ค


นี่คือแฮ็คอย่างแน่นอน แก้ไขปัญหาแทนการลบข้อยกเว้น
Daan van den Bergh

-2

vendor/magento/framework/View/Design/Fallback/Rule/Simple.phpในที่สุดผมก็คงได้โดยการแสดงความคิดเห็นภายใต้ข้อยกเว้น

if (in_array($placeholder, $this->optionalParams)) {
    return [];
} else {
    return [];
    //throw new \InvalidArgumentException("Required parameter '{$placeholder}' was not passed");
}

4
แต่สิ่งนี้ไม่สามารถแก้ไขข้อผิดพลาดได้ แต่จะไม่แสดงอีกต่อไป (ฉันคิดว่าวิธีแก้ปัญหาของ Vu Anh แก้ไขได้มากกว่านี้)
BvdVen

3
นี่ไม่ใช่วิธีที่ถูกต้องในการแก้ไขปัญหานี้! ตรวจสอบคำตอบจาก Vu Anh
medina

2
นี่ไม่ใช่ทางออกที่ดีที่สุด โปรดอย่าทำเช่นนี้
Ankit Shah
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.