Я пытаюсь изменить свой config/database.php в моем проекте CodeIgniter, так что мне не нужно постоянно менять информацию о базе данных каждый раз, когда я нажимаю новую версию на сервер. Чтобы сделать последнее, я создал переменную $debug , показанную ниже, которая проверяет uri, чтобы проверить, выполняется ли сайт на моей машине localhost (где я создаю проект перед загрузкой) или на самом сервере.
К сожалению, в файле database.php у меня нет доступа к переменной $this , и поскольку я лично новичок в ООП в PHP, я не совсем уверен в этом. Пожалуйста, скажите, как я могу это сделать?
Благодаря,
Максимум.
Неустранимая ошибка: использование $ this, если не в контексте объекта в приложении / config / database.php в строке 51
$debug = strpos($this->uri->config->item('base_url'), 'localhost'); //line 51 $db['default']['hostname'] = $debug == TRUE ? 'x' : 'y'; $db['default']['username'] = $debug == TRUE ? 'x' : 'y'; $db['default']['password'] = $debug == TRUE ? 'x' : 'y'; $db['default']['database'] = $debug == TRUE ? 'x' : 'y';
Вам нужно получить экземпляр объекта codeigniter –
$CI = get_instance();
Для более старых версий php используйте = &
Затем используйте $CI где бы вы обычно не использовали $this
Вам нужно использовать get_instance() чтобы получить $this переменную $this .
$ci = get_instance(); // $ci replaces $this echo $ci->config->item('base_url');
$this This variable – специальная переменная, используемая в объектно-ориентированном коде, когда у вас есть классы – см. Php.net для некоторого фонового чтения на нем.
$this только для объектов, вы не можете использовать его вне объекта. Я считаю, что лучший способ сделать это – исключить файл database.php при развертывании. В IDE, который вы используете, должна быть предусмотрена возможность исключения файла из развертывания.
На этот вопрос есть простой ответ.
Раздел «Чтение среды» по адресу: http://codeigniter.com/user_guide/libraries/config.html
в основном создавать две папки application / config / production и application / config / development
и поместите одну копию вашего файла database.php в каждую папку.
Вы также можете использовать $_SERVER['SERVER_NAME'] и сравнить его с именами серверов (localhost или remote). В CI есть функция, которая проверяет ее:
$this->input-> server('SERVER_NAME')
Как указано выше, вы должны изменить this если не в контексте объекта.