Я использую Propel вместе с CodeIgniter. Я сделал класс MY_Model
(который расширяет CI_Model
), который использует свой конструктор для загрузки Propel.Использование пространства имен в расширенном классе
В случае, если вы любопытны:
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());
}
}
Итак, теперь, когда я делаю новую модель CodeIgniter, он загрузит Propel для меня. Дело в том, что я добавил пространства имен в некоторые из созданных Propel моделей. Я подумал, что могу добавить строку use Reports;
внутри конструктора модели, но нет.
class Reports_model extends MY_Model{
function __construct(){
parent::__construct();
use Reports;
}
}
Это дает мне
syntax error, unexpected T_USE
Хорошо, я подумал, давайте попробуем поставить его вне конструктора:
class Reports_model extends MY_Model{
use Reports;
function __construct(){
parent::__construct();
}
}
Теперь я получаю длинную ошибку:
syntax error, unexpected T_USE, expecting T_FUNCTION
В крайнем случае, я добавил use Reports;
перед декларированием класса:
use Reports;
class Reports_model extends MY_Model{
function __construct(){
parent::__construct();
}
}
Теперь я получаю еще больше ошибок!
The use statement with non-compound name 'Reports' has no effect
Class 'ReportsQuery' not found
В другой функции в классе, у меня есть строка, которая делает $report = ReportsQuery::create();
.
Итак, как я могу получить линию use Reports;
? Я действительно не хочу добавлять Reports\
всюду.
Как я могу сделать так, что я могу сделать:
$report = ReportsQuery::create();
вместо:
$report = Reports\ReportsQuery::create();
Хороший вопрос ... и мое продолжение было бы причиной того, почему PHP не может найти пространство имен «Отчеты»? я предполагаю, что расположение класса 'Reports_model' делает так, что PHP не знает, где найти« Отчеты ». Извините, я не эксперт по пространству имен, но вы можете спросить об этом в группе Propel google, если вы не получите ответ здесь! – jakerella
@jakerella: пространство имен «Отчеты» существует только в моделях Propel. Я предполагаю, что конструктор 'MY_Model' еще не был вызван, поэтому PHP не знает, где находится пространство имен. –
Riiiight ... hrm. Может быть, вам просто нужно всегда начинать Propel по сравнению с конструктором модели? Другими словами, поместите его в какую-то зону запуска (не очень знакомая с CI). – jakerella