문제

마녀가 교리 중첩 세트 기능을 사용하고있는 일부 모델이 있습니다. 내 응용 프로그램에서 필요하기 때문에 트리에서 요소의 기능 삭제 기능을 추가하고 싶습니다. 나는 문서화에서 스 니펫으로 시도했지만 그 코드에 대해 매우 이상한 오류가 발생하고 있습니다.

Yaml은 여기에 있습니다. http://pastie.org/820978

그리고 나는 내 메뉴 에서이 코드로 시도하고 있습니다. 마녀는 생성 된 추상 클래스베이스 멘누를 확장하고 Basemenu는 proctrine_record를 확장합니다 :)

어쨌든 내 코드 :

 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)가 전쟁을 겪고 있음을 알았습니다.

경고 : get_class ()는 매개 변수 1이 객체가 될 것으로 기대합니다. 부울은 ...

그러나 나는 이것에 대한 해결책이 필요하며 모든 힌트를 환영합니다 ...

도움이 되었습니까?

해결책

getNode ()는 Doctrine_Record가 아닌 Doctrine_Node를 반환합니다.

Doctrine_record를 삭제할 수 있지만 Doctrine_Node는 삭제할 수 없습니다. 어쨌든 지속되지 않기 때문입니다.

올바른 논리는 단순히 다음과 같습니다.

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

또한 모델 '삭제'에서 메소드를 이름을 지정하지 마십시오 !! 이것은 Doctrine_record의 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();
 }

답변은 귀하의 질문에 있습니다 : $ 항목은 객체가 아닙니다 (값은 거짓이라고 생각하지만 var_dump ($ item)을 사용할 수 있습니다).

경고 : get_class ()는 매개 변수 1이 객체가 될 것으로 기대합니다. 부울은 ...

치명적인 오류 : 회원 기능 getNode ()로 호출하지 않음.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top