J'utilise Propel avec CodeIgniter. J'ai fait une classe MY_Model
(qui s'étend CI_Model
) qui utilise son constructeur pour charger Propel.Utilisation d'un espace de noms dans une classe étendue
Si vous êtes curieux:
class MY_Model extends CI_Model{
public function __construct(){
parent::__construct();
require_once '/propel/runtime/lib/Propel.php';
Propel::init('/build/conf/project-conf.php');
set_include_path('/build/classes'.PATH_SEPARATOR.get_include_path());
}
}
Alors, maintenant, quand je fais un nouveau modèle de CodeIgniter, il va charger Propel pour moi. La chose est, j'ai ajouté des espaces de noms à quelques-uns des modèles générés par Propel. J'ai pensé que je pourrais ajouter la ligne use Reports;
dans le constructeur du modèle, mais non.
class Reports_model extends MY_Model{
function __construct(){
parent::__construct();
use Reports;
}
}
Cela me donne
syntax error, unexpected T_USE
Ok, je pensais, nous allons essayer de le mettre à l'extérieur du constructeur:
class Reports_model extends MY_Model{
use Reports;
function __construct(){
parent::__construct();
}
}
Maintenant je une plus longue erreur:
syntax error, unexpected T_USE, expecting T_FUNCTION
En dernier recours, j'ai ajouté le use Reports;
avant la déclaration de classe:
use Reports;
class Reports_model extends MY_Model{
function __construct(){
parent::__construct();
}
}
Maintenant, j'ai encore plus d'erreurs!
The use statement with non-compound name 'Reports' has no effect
Class 'ReportsQuery' not found
Dans une autre fonction dans la classe, j'ai une ligne qui ne $report = ReportsQuery::create();
. Alors, comment puis-je faire fonctionner la ligne use Reports;
? Je n'ai vraiment pas envie d'ajouter Reports\
partout.
Comment puis-je faire si je peux le faire:
$report = ReportsQuery::create();
au lieu de:
$report = Reports\ReportsQuery::create();
Bonne question ... et mon suivi serait pourquoi PHP ne peut-il pas trouver l'espace de noms 'Reports'? je suppose que l'emplacement de la classe 'Reports_model' rend PHP tel qu'il ne sait pas où trouver' Reports'. Désolé, je ne suis pas un expert de l'espace de noms, mais vous pouvez demander ceci dans le groupe Google de Propel si vous n'obtenez pas de réponse ici! – jakerella
@jakerella: L'espace de noms 'Reports' n'existe que dans les modèles de Propel. Ma conjecture est que le constructeur de 'MY_Model' n'était pas encore appelé, donc PHP ne sait pas où est l'espace de noms. –
Riiiight ... hrm. Peut-être devrez-vous toujours initer Propel versus dans le constructeur du modèle? En d'autres termes, mettez-le dans une sorte de zone de démarrage (pas très familier avec CI). – jakerella