Symfony2 - คำเตือน: class_parents(): Class Ambience ไม่มีอยู่และไม่สามารถโหลดได้

ฉันกำลังพยายามสร้างเอนทิตีโดยใช้ yml และฉันได้รับข้อผิดพลาดต่อไปนี้:

[ErrorException]

  Warning: class_parents(): Class Ambience does not exist and could not be loaded in C:\wamp\www\demo\vendor\gedmo-doctrine-extensions\lib\Gedmo\Mapping\ExtensionMetadataFactory.php line 80

ฉันได้สร้างไฟล์ชื่อ Entities.UserTestDelete.dcm.yml ใน FooBundle/Resources/config/doctrine/metadata/orm

เนื้อหาของไฟล์:

Entities\UserTestDelete:
  type: entity
  table: users
  id:
    id:
      type: integer
      generator:
        strategy: AUTO
  fields:
    name:
      type: string
      length: 50

จากนั้นฉันก็ดำเนินการคำสั่งต่อไปนี้:

php app/console doctrine:mapping:import "DemoFooBundle" yml

แล้วฉันก็ได้รับข้อผิดพลาด มีความคิดใดบ้างว่าทำไมถึงเป็นปัญหา?


person Georgi Angelov    schedule 30.06.2014    source แหล่งที่มา


คำตอบ (2)


เพิ่งมีปัญหาเดียวกัน ... และจัดการแก้ไขได้ ...

a var_dump($this) บน __contruct ของคลาสข้อยกเว้น ในกรณีของฉัน:

  • Symfony\Component\Debug\Exception\ContextErrorException

ให้ฉัน $message->$trace ซึ่งนำฉันไปสู่:

  • ผู้ขาย / sylius / ทรัพยากรมัด / EventListener / LoadORMMetadataSubscriber.php
  • เรียกใช้ฟังก์ชัน "class_parents"
  • ในฟังก์ชัน "setAssociationMappings"

วิธีแก้ไขด่วนคือการแสดงความคิดเห็นเกี่ยวกับกิจกรรมที่สมัครรับข้อมูล:

/**
 * @return array
 */
public function getSubscribedEvents()
{
//    return array(
//        'loadClassMetadata',
//    );
}

ตอนนี้เมื่อรัน "app/console doctrine:mapping:import" อีกครั้ง ... จะไม่มีข้อผิดพลาดอีกต่อไป ...

หากจำเป็น ให้รันคำสั่ง mapping:convert และ Generate:entities ก่อนที่จะเปิดใช้งาน / ไม่แสดงข้อคิดเห็นเหตุการณ์ที่สมัครเป็นสมาชิกอีกครั้ง ...

หากคุณไม่ได้ใช้ Sylius ให้ลองใช้ var_dump'ing ในคลาสยกเว้นของคุณ ... มีโอกาสที่ดีที่คุณก็มี Eventlistner บางตัวที่รบกวนคำสั่ง Doctrine's Import ...

ขอให้โชคดี!

person djaed    schedule 14.04.2015

อัปเดต
ข้อผิดพลาดแรกของคุณคือคุณสร้างไฟล์ yml ตามที่อธิบายไว้ใน ตำราอาหาร จริงๆ แล้วคำสั่ง doctrine:mapping:import สร้าง ไฟล์ ทิ้งของคุณ รันคำสั่ง และปล่อยให้หลักคำสอนสร้างไฟล์เอง
สิ่งที่คุณทำหลังจากนั้นคือสร้างคลาสเอนทิตีจริง:

php app/console doctrine:mapping:convert annotation ./src
php app/console doctrine:generate:entities DemoFooBundle

หากยังไม่มีตาราง คุณสามารถใช้ 2 คำสั่งสุดท้ายเหล่านี้เพื่อสร้างเอนทิตี จากนั้นจึงเรียกใช้

php app/console doctrine:schema:update --force

เพื่อให้มีหลักคำสอนสร้างตารางสำหรับคุณ


การดูตำราอาหารอย่างรวดเร็วบอกฉันว่าไม่ควรอ้างอิงชื่อบันเดิล และคุณอาจต้องการส่งแฟล็ก --force ไปยังคำสั่ง doctrine:mapping:import
มันอยู่ในบิตวิศวกรรมย้อนกลับ

php app/console doctrine:mapping:import --force DemoFooBundle yml

นั่นคือตัวอย่างตำราอาหารของ Symfony2 ที่มอบให้ แต่เปลี่ยนมาใช้ yml เท่านั้น แทนที่จะเป็นรูปแบบ xml

ข้อความแสดงข้อผิดพลาดอาจเกี่ยวข้องกับชื่อตาราง:

table: users

ในกรณีที่เรียกเอนทิตี

class Users
{}

คำถามที่เกี่ยวข้องที่เป็นไปได้

person Elias Van Ootegem    schedule 30.06.2014
comment
มันให้ข้อผิดพลาดเดียวกันทุกประการแม้ว่าจะเปลี่ยนคำสั่งและเปลี่ยนชื่อตารางเป็นชื่ออื่นก็ตาม - person Georgi Angelov; 30.06.2014
comment
@GeorgiAngelov: ขออภัยไม่ได้อ่านคำถามอย่างละเอียดอัปเดตแล้ว - person Elias Van Ootegem; 30.06.2014
comment
ฉันทิ้งไฟล์ yml ที่สร้างขึ้นด้วยตนเองและรันคำสั่ง มันทำให้ฉันเกิดข้อผิดพลาดเดียวกันทุกประการ... มีไฟล์ปรับแต่งเฉพาะใดบ้างที่ต้องตั้งค่าเพื่อให้ฉันใช้หลักคำสอนหรือไม่ - person Georgi Angelov; 30.06.2014
comment
@GeorgiAngelov: ลองล้างแคชหลักคำสอน (app/console doctrine:cache:clear-metadata และ clear-query และ clear-result) - person Elias Van Ootegem; 30.06.2014
comment
ฉันรันทั้งสามคำสั่งแต่กลับไม่แสดงผลลัพธ์ใดๆ (ไม่มีอะไรให้ชัดเจน) หลังจากนั้นฉันก็รันคำสั่งและข้อผิดพลาดยังคงอยู่ - person Georgi Angelov; 30.06.2014
comment
@GeorgiAngelov: ไม่สร้างเอาต์พุตใดๆ แต่นั่นไม่ได้หมายความว่าพวกเขาไม่ ทำ อะไรเลย - person Elias Van Ootegem; 30.06.2014
comment
ขออภัยฉันแก้ไขคำตอบของฉัน ฉันรันคำสั่งหลังจากนั้นโดยไม่คำนึงถึงและมันก็ยังทำให้ฉันมีข้อผิดพลาดเหมือนเดิม - person Georgi Angelov; 30.06.2014
comment
@GeorgiAngelov: ดูที่บรรทัด 80 ของคลาส ExtensionMetadataFactory (เส้นทางอยู่ในข้อความแสดงข้อผิดพลาด) คุณจะเห็นว่าคลาสกำลังโหลดอยู่ คุณต้องเคยใช้คลาส Ambience ที่ไหนสักแห่งมาก่อน เอนทิตีบางส่วนกำลังขยายออกไป หรืออย่างน้อยก็กล่าวถึงที่ไหนสักแห่ง อย่างไรก็ตาม ไม่มีเอนทิตีนี้ IDE ที่เหมาะสมเพียงครึ่งเดียวจะช่วยให้คุณสามารถค้นหาทั้งโปรเจ็กต์เพื่อใช้สตริง ค้นหาโปรเจ็กต์ของคุณด้วย Ambience และกำหนดคลาส หรือใส่ความคิดเห็นในบิต extends - person Elias Van Ootegem; 30.06.2014