Bonjour,

Je travaille actuellement sur un projet où un component hérite d'un autre component généré dans le cache grâce aux classes sfGenerator. L'idée est de pouvoir afficher le template du component parent en appelant l'enfant.

J'ai réussi à faire tourner cette configuration quand le component enfant est dans les plugins. Sitôt qu'il est dans les répertoires du projet, ce que je cherche à faire ne fonctionne pas. Je n'arrive pas à déterminer la cause, je sais juste que ce que j'essaie de faire a déjà marché.

Je vais essayer de créer une configuration simplissime pour illustrer mon problème.

Nous avons une appli frontend avec 3 modules a, b et test.

a et b sont censés être des modules components, b héritant de a (nous allons y venir).
test est un modules classique appelable depuis l'url (actions.class)

Visuellement, l'arborescence du frontend ressemble à ça :



Voici le components.class.php du component "a" dans le frontend :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
<?php
 
class aComponents extends sfComponents
{
  public function executeIndex(sfWebRequest $request)
  {
    $this->a = 'toto';
  }
}
Le template _index.php ressemble à ça :

Quand il est appelé il affiche donc "toto".

Voici le components.class.php du component "b" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<?php
 
require_once sfConfig::get('sf_plugins_dir').'/testPlugin/modules/a/actions/components.class.php';
 
class bComponents extends aComponents
{
 
}
Soit enfin le module test avec l'action.class :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
<?php
 
class testActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
 
  }
}
Son template indexSuccess.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<?php include_component('a', 'index') ?>
Dans ce cas-ci nous verrons apparaître "toto" lors de l'appel de l'action test/index

par contre avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<?php include_component('b', 'index') ?>
on obtient
500 | Internal Server Error | sfRenderException
The template "_index.php" does not exist or is unreadable in "".
Parce qu'apparemment on ne peut peut pas appeler le template _index.php de "a" depuis le component "b". Enfin, en général, parce que pour moi ça a marché une fois quand j'ai appelé un component du plugin héritant d'un component autogénéré dans le cache, mais je ne sais plus pourquoi...

Si quelqu'un a une idée à propos de ce problème, je lui serai très reconnaissant de partager sa solution.

Merci à ceux qui se pencheront sur mon soucis.