Я переписываю свое приложение, чтобы использовать CodeIgniter. В настоящее время я борюсь с БД. Я настроил базы данных в config/databases.php
но понятия не имею, как получить доступ к ним на уровне библиотеки.
Я загружаю библиотеки через autoload.php
:
$autoload['libraries'] = array('database', 'FGMembersite', 'phpmailer', 'formvalidator');
FGMembersite – это класс, который я использую для регистрации и входа в систему.
Я получаю доступ к этому классу в виде login.php
где у меня есть:
if(isset($_POST['submitted'])) { if($this->fgmembersite->Login()) { $this->fgmembersite->RedirectToURL("main"); } }
fgmembersite->Login()
приводит к:
public function DBLogin() { $this->connection = pg_connect("host=localhost port=5432 dbname=".$this->db->database." user=".$this->ci->db->username." password=".$this->db->password."");
но DBLogin()
здесь не понимает, что такое db
. Я получаю ошибки, подобные
Undefined property: FGMembersite::$db
или
Trying to get property of non-object
Как я должен получить доступ к конфигурации базы данных в моем FGMembersite
?
Для получения доступа к автоматически загружаемым библиотекам из других библиотек вам необходимо использовать супер-объект CodeIgniter . Вот так
$ci =& get_instance(); $this->connection = pg_connect("host=localhost port=5432 dbname=" . $ci->db->database . " user=" . $ci->db->username . " password=" . $ci->db->password );
Похоже, вы пытались использовать этот метод в своем коде, за исключением того, что вы использовали его только для поля username
, а не для database
и password
.
Вы можете сохранить экземпляр ci, назначив его свойству класса в свой конструктор классов, например:
class Yourclass { private $ci; public function __construct() { $this->ci =& get_instance(); } public DBLogin() { $this->connection = pg_connect("host=localhost port=5432 dbname=" . $this->ci->db->database . " user=" . $this->ci->db->username . " password=" . $this->ci->db->password ); } public somethingElse() { print_r ($this->ci->db->username); } }