Я переписываю свое приложение, чтобы использовать 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); } }