Я столкнулся с проблемой, которую я до сих пор не смог решить. Я создал database class
в app/db/mysql/database.php
со следующим содержимым:
<?php namespace App\Database; use Symfony\Component\Yaml\Yaml; class Database{ private static $connection = null; private function __construct( $host, $base, $user, $pass ){ try{ self::$connection = new PDO("mysql:host=$host;dbname=$base", $user, $pass); }catch(PDOException $e){ die($e->getMessage()); } } public static function get(){ if( self::$connection !== null ){ return self::$connection; } $yaml = Yaml::parse(file_get_contents(realpath('./app') . '/database.yml')); self::$connection = new Database( $yaml['host'], $yaml['base'], $yaml['user'], $yaml['pass'] ); } }
Используя композитор, я автоматически загружаю этот класс:
{ "autoload" : { "classmap" : [ "app/libraries", "app/db" ] } }
Какие генерируют autoload_classmap.php
такие как:
return array( 'App\\Database\\Database' => $baseDir . '/app/db/mysql/database.php', 'App\\Libraries\\Parser' => $baseDir . '/app/libraries/Parser.php', );
Теперь, когда все работает нормально, я всегда получаю ошибку, связанную с PDO:
Fatal error: Class 'App\Database\PDO' not found in /var/www/my_application/app/db/mysql/database.php on line 24
Я думаю, проблема возникает из namespace
потому что, когда я помещаю класс в индексную страницу, у меня нет никакой ошибки. PDO установлен и работает.
Вопрос уже был отредактирован, но для людей, которые просто идут прямо к ответам, вот оно ..
Вы должны использовать правильные пространства имен для объектов в ваших методах, либо «использовать» их, либо префикс их с корневым пространством имен;
<?php //... namespace etc... use \PDO; self::$connection = new PDO("mysql:host=$host;dbname=$base", $user, $pass);
или просто;
self::$connection = new \PDO("mysql:host=$host;dbname=$base", $user, $pass);