CodeIgniter; $ это использование в не объектном контексте - PullRequest
2 голосов
/ 17 февраля 2012

Я пытаюсь отредактировать мой config/database.php в своем проекте CodeIgniter, чтобы мне не приходилось постоянно изменять информацию базы данных каждый раз, когда я отправляю новую версию на сервер. Чтобы сделать последнее, я создал переменную $debug, показанную ниже, которая проверяет URI, чтобы увидеть, запущен ли сайт на моем локальном компьютере (где я создаю проект перед загрузкой) или на реальном сервере.

К сожалению, в файле database.php у меня нет доступа к переменной $this, и, поскольку я лично новичок в ООП в PHP, я не совсем уверен, как обойти это. Подскажите, пожалуйста, как я могу это сделать?

Спасибо

Макс.

Неустранимая ошибка: использование $ this, когда оно не в контексте объекта в application / 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';

Ответы [ 5 ]

13 голосов
/ 17 февраля 2012

Вам нужно получить экземпляр объекта codeigniter -

$CI = get_instance();

Для более старых версий php используйте = &

Затем используйте $CI везде, где вы обычно используете $this

2 голосов
/ 17 февраля 2012

Вам нужно использовать get_instance(), чтобы получить переменную $this.

$ci = get_instance(); // $ci replaces $this
echo $ci->config->item('base_url');

Переменная $this - это специальная переменная, используемая в объектно-ориентированном коде, когда у вас есть классы - см. php.net для фонового чтения.

0 голосов
/ 03 мая 2013

Вы также можете использовать $_SERVER['SERVER_NAME'] и сравнить его с именами серверов (локальный или удаленный).В CI есть функция, которая проверяет это:

$this->input-> server('SERVER_NAME')

Как написано выше, вы должны изменить this, если не в контексте объекта.

0 голосов
/ 18 февраля 2012

Существует простой ответ на эту проблему.

Прочтите раздел «Окружающая среда» по адресу: http://codeigniter.com/user_guide/libraries/config.html

в основном создать две папки приложение / конфиг / производство и Приложение / конфигурация / развитие

и поместите одну копию вашего database.php в каждую папку.

0 голосов
/ 17 февраля 2012

$this только для объектов, вы не можете использовать его вне объекта.Я считаю, что лучший способ сделать это - исключить файл database.php при развертывании.В используемой IDE должна быть возможность исключить файл из развертывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...