سؤال

لدي بعض النماذج الساحرة تستخدم ميزة العقيدة NestedSet. أريد أن أضيف حذف وظيفة عناصر من شجرة منذ ذلك الحال بالنسبة للتطبيق الخاص بي. كنت أحاول مع القصاصات من الوثائق، لكنني أحصل على خطأ غريب للغاية مع هذا الرمز.

يامل هنا: http://pastie.org/820978.

وأنا أحاول مع هذا الرمز في قائمتي فئة ساحرة تمتد من فئة مجردة الناتجة basemenu و basemenu يمتد العقيدة :)

على أي حال الرمز الخاص بي:

 public function getMenuItem($id)
 {
     return Doctrine::getTable('Menu')->find($id);
 }

 public function delete($id)
 {
     $item = $this->getMenuItem($id);

     //echo get_class($item); will return Menu so object exists !?

     $item->getNode()->delete();
 }

وأحصل على هذا الخطأ:

خطأ فادح: اتصل على وظيفة الأعضاء GetNode () على غير كائن

ولاحظت أن get_class (item it it it it it it it) مرنها (بحيث يكون هذا سببا لهذا السلوك الغريب):

تحذير: Get_Class () تتوقع المعلمة 1 أن تكون كائن، منطقية تعطى في ...

ومع ذلك، أحتاج إلى حل لهذا وجميع التلميحات موضع ترحيب ...

هل كانت مفيدة؟

المحلول

GetNode () إرجاع actrine_node، وليس actrine_record.

يمكن حذف Doctrine_record، ولكن لا يمكن حذف actrine_node - لأنه ليس ثابتا على أي حال.

المنطق الصحيح سيكون ببساطة:

$item = $this->getMenuItem($id)->delete();

أيضا، لا تسميه طريقة في النموذج الخاص بك "حذف" !! سيؤدي ذلك إلى تجاوز طريقة Dectrine_record's Delete ()، والتي ستقودك مجنونا في محاولة تصحيح ذلك.

نصائح أخرى

أنا شخصيا لا أحب استخدام العقيدة :: gettable ("table_name") لأنه لا يجعل الرمز جاف جدا. إذا تغير بعض الأسباب "Table_Name" على الإطلاق، فسيتعين عليك تغييره في الكثير من الأماكن.

لقد استخدمت عقيدة في تطبيقات Zend Framework، لذلك ينطوي نمط استخدام نموذجي النموذجي على إنشاء مثيل محمي لكل نموذج في الوحدة النمطية الخاصة بي.

باستخدام هذا النمط، أود أن أفعل هذا فقط في جهاز التحكم الخاص بي

$this->_Menu
     ->getTable()
     ->find($id)
     ->getNode()
     ->delete();

إذا كنت ترغب حقا في الحفاظ على وظائفك مماثلة، فسأستعب شيئا مثل هذا

 public function getMenuItem($id)
 {
     if (empty($id))
     {
         throw new Exception ("A parameter of id is required to retrieve a menu item".);
     }
     return $this->getTable()->find($id);
 }

 public function delete($id)
 {
     $item = $this->getMenuItem($id);

     if ($item instanceof Doctrine_Record == false)
     {
          throw new Exception("Item is not a valid Menu Record.");
     }

     $item->getNode()->delete();
 }

الإجابة في سؤالك: $ عنصر ليس كائن (أعتقد أن القيمة هي FALSE، ولكن يمكنك استخدام Var_Dump (Item $))، لأنه لا يوجد صف بهذا المعرف في DB (كما أعتقد أن معرف $ الخاص بك لاغ

تحذير: Get_Class () تتوقع المعلمة 1 أن تكون كائن، منطقية تعطى في ...

خطأ فادح: اتصل على وظيفة الأعضاء GetNode () على غير كائن

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top