2017-06-03 5 views
0

J'utilise cakephp 3.4.2 et je fais le blog tutorial pour replonger dans le nouveau cakephp. J'ai décidé de suivre le tutoriel mais de l'empaqueter comme un plugin.cakephp 3 comportement de l'arbre sur le modèle associé

Il existe un modèle d'articles et un modèle de catégories et nous utilisons le comportement de l'arborescence sur la méthode initialize() de CategoriesTable.php.

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' 
    ]); 
} 

Lorsque vous appelez la méthode de recherche dans la CategoriesController.php liste arborescente ajouter ou modifier la fonction, il fonctionne très bien et la liste filetée apparaît bien dans la liste de sélection de la forme.

Le ArticlesController.php ajouter et modifier des fonctions

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')); 
} 

renvoie une erreur:

Unknown finder method "treeList" 

J'ai essayé instancier le comportement des arbres dans le ArticlesTable.php comme je l'ai fait dans le CategoriesTable. php (bien que je ne pense pas que cela devrait être nécessaire) mais cela ne fonctionne pas - et l'erreur persiste. Toutes les suggestions seraient appréciées.

de débogage debug($this->Articles->Categories->target());

`/plugins/Blog/src/Controller/Admin/ArticlesController.php objet (ligne 51) (gâteau \ ORM \ Table) {

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

}`

fonction ArticlesTable.php initialize:

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

    $this->addBehavior('Timestamp'); 

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

} 
+1

Votre message est manquant le code réel qui déclenche l'erreur ... il est difficile de donner des conseils sans voir. – ndm

+0

C'était stupide de ma part - désolé. J'ai édité la question avec la fonction d'addition. Excuses. – Manu

+1

On dirait que $ this-> Articles-> Categories' n'est pas ce que vous attendez d'elle. Si vous déboguez $ this-> Articles-> Categories-> target() ', vous verrez probablement qu'il s'agit d'une instance de' \ Cake \ ORM \ Table' à la place de votre classe concrète 'ArticlesTable'? À quoi ressemble la méthode 'initialize()' de votre classe 'ArticlesTable'? – ndm

Répondre

0

Merci à NDM avoir signalé ...

L'association belongsTo doit pointer vers Blog.Categories