2017-06-03 93 views
0

我正在使用cakephp 3.4.2並正在做blog tutorial以重新進入新的cakephp。我決定遵循教程,但將其打包爲插件。cakephp在相關模型上的3樹行爲

有文章模型和類別模型,我們在CategoriesTable.php initialize()方法上使用樹行爲。

public function initialize(array $config) 
{ 
    $this->table('categories'); 
    $this->displayField('name'); 
    $this->primaryKey('id'); 

    $this->addBehavior('Tree'); 

    $this->belongsTo('ParentCategories', [ 
     'className' => 'Blog.Categories', 
     'foreignKey' => 'parent_id' 
    ]); 
    $this->hasMany('Articles', [ 
     'foreignKey' => 'category_id', 
     'className' => 'Blog.Articles' 
    ]); 
    $this->hasMany('ChildCategories', [ 
     'className' => 'Blog.Categories', 
     'foreignKey' => 'parent_id' 
    ]); 
} 

當你調用在CategoriesController.php的樹形列表finder方法添加或編輯功能的正常工作和螺紋清單很好地顯示了形式的選擇列表。

的ArticlesController.php添加和編輯功能

public function add() 
{ 
    $article = $this->Articles->newEntity(); 
    if ($this->request->is('post')) { 
     $article = $this->Articles->patchEntity($article, $this->request->getData()); 
     if ($this->Articles->save($article)) { 
      $this->Flash->success(__('Your article has been saved.')); 
      return $this->redirect(['action' => 'index']); 
     } 
     $this->Flash->error(__('Unable to add your article.')); 
    } 
    $this->set('article', $article); 

    $categories = $this->Articles->Categories->find('treeList'); 
    $this->set(compact('categories')); 
} 

拋出一個錯誤:

Unknown finder method "treeList" 

我試圖實例在ArticlesTable.php樹的行爲,因爲我在CategoriesTable所做的那樣。 PHP(雖然我不認爲這應該是必要的),但這是行不通的 - 錯誤依然存在。 任何建議,將不勝感激。

調試從debug($this->Articles->Categories->target());

`/plugins/Blog/src/Controller/Admin/ArticlesController.php(線51) 對象(蛋糕\ ORM \表){

'registryAlias' => 'Categories', 
'table' => 'categories', 
'alias' => 'Categories', 
'entityClass' => '\Cake\ORM\Entity', 
'associations' => [], 
'behaviors' => [], 
'defaultConnection' => 'default', 
'connectionName' => 'default' 

}`

ArticlesTable.php初始化函數:

public function initialize(array $config) 
{ 
    $this->table('articles'); 
    $this->displayField('title'); 
    $this->primaryKey('id'); 

    $this->addBehavior('Timestamp'); 

    $this->belongsTo('Categories', [ 
     'foreignKey' => 'category_id', 
    ]); 

} 
+1

您的文章缺少觸發錯誤的實際代碼......很難沒有看到,要提供任何意見。 – ndm

+0

這真是愚蠢 - 對不起。我用add函數編輯了這個問題。道歉。 – Manu

+1

看起來像'$ this->文章 - >類別'不是你所期望的。如果你調試'$ this-> Articles-> Categories-> target()',你可能會發現它是'\ Cake \ ORM \ Table'的一個實例,而不是具體的'ArticlesTable'類? 'ArticlesTable'類的'initialize()'方法是什麼樣的? – ndm

回答

0

謝謝到NDM指出這一點...

的屬於關聯協會應指向Blog.Categories