ปัญหาเป็นที่รู้จักกันดี: lib
คลาสถูกโหลดผ่านออโต้โหลดโดยเฉพาะและเราไม่สามารถเปลี่ยนแปลงได้นอกจาก:
- การคัดลอกทั้งหมดไปยัง codePool ที่ถูกตรวจสอบก่อนหน้า lib
- การติดตั้งตัวโหลดอัตโนมัติ PSR-0ระบุแผนผังคลาสอัตโนมัติจากนั้นคัดลอกไฟล์ทั้งหมดลงในโครงสร้างโฟลเดอร์นั้นแทน [โซลูชันปัจจุบันของฉัน]
ฉันอยู่ในจุดที่ยากลำบากเพราะฉันต้องการสัมผัสไฟล์เหล่านี้จำนวนมาก - แต่เพื่อความมีสติและความเสถียร / ความสามารถในการอัพเกรดของฉันที่ร้านไม่ต้องการคัดลอกคลาสห้องสมุดทั้งหมด
ตอนนี้เห็นได้ชัดว่ามีวิธีแก้ปัญหาที่เป็นไปได้ แต่พวกเขาทั้งหมดมาพร้อมกับชุดของปัญหา:
- ใช้เส้นทางAOPและใช้ไลบรารีที่เป็น PHP เช่นGo! AOP : ครั้งสุดท้ายที่ฉันตรวจสอบสิ่งนี้จะต้องโหลดคลาสวีโอไอพีโดยผู้สร้างอัตโนมัติโหลดออเดอร์ Flyingmana ทำงานบางอย่างในพื้นที่นี้ แต่มันยังไม่พร้อมสำหรับการใช้งานจริงและความต้องการของฉันก็เพิ่มขึ้นทันที ฉันยังต้องการจัดส่งเป็นส่วนขยายและนั่นจะต้องมีการตั้งค่าผู้แต่งเพิ่มเติม
- ไปที่เส้นทาง AOP และใช้ส่วนขยาย PHP แบบเนทีฟ : อาจเป็นที่นิยมมากที่สุดในตอนนี้ แต่จะต้องติดตั้งส่วนขยายแยกต่างหากไม่ต้องพูดถึงว่าจะไม่ทำงานกับ HHVM
- ใช้classkitของ PHP และ / หรือrunkit : เป็นอีกหนึ่งนามสกุล PHP ดั้งเดิมดังนั้นจึงมีปัญหาเช่นเดียวกับข้างต้น
- Patch sites sites เพื่อใช้ namespaced (
\Danslo\Varien_X
) ของฉันเองจากนั้นขยายจากเดิม (\Varien_X
): มีเว็บไซต์ที่จะทำการปะแก้ไขได้จำนวนมากและต้องใช้การเขียนใหม่จำนวนเล็กน้อย ไม่ใช่ตัวเลือก ม้วนตัวเอง: มันควรจะเป็นไปได้ที่:
- เขียน autoloader ของฉันเอง
- คัดลอกระดับเดิมไปยังโฟลเดอร์ที่แยกต่างหาก (
{root_dir}/var/tmp
)namespace \Magento { < original contents > }
ห่อไว้ใน - รวมไฟล์นั้น
- รวมคลาสที่แก้ไขของฉัน
OriginalClass extends Magento\OriginalClass {}
ข้อเสียของสิ่งนี้ชัดเจน: การสร้างรหัสแบบไดนามิก, regex, ค่าใช้จ่ายเล็กน้อยสำหรับการโหลดคลาสที่เขียนใหม่ แต่ฉันเกือบจะแน่ใจว่า ณ จุดนี้มันจะเอาชนะการคัดลอกรหัส ~ 5000 บรรทัดเมื่อฉันต้องการสัมผัส / เพิ่ม ~ 100 บรรทัด
ฉันรู้ว่าฉันขออะไรมากมาย แต่มีบางสิ่งที่ทันสมัยและค่อนข้างสะอาดที่ช่วยแก้ปัญหานี้หรือไม่