2014-10-26 2 views
0

Возможно, простой вопрос, но для меня как стартер с Neo4j барьер. Я установил neo4jphp с композитором в том же каталоге, что и мое приложение. Создана папка-подкаталог и доступна доступная папка для каждого пользователя/neo4j. Для первого теста я использовал этот фрагмент кода из примеров:neo4jphp: Невозможно создать абстрактный класс Everyman Neo4j Transport

spl_autoload_register(function ($className) { 

    $libPath = 'vendor\\'; 
    $classFile = $className.'.php'; 
    $classPath = $libPath.$classFile; 
    if (file_exists($classPath)) { 
    require($classPath); 
    } 
}); 

require('vendor/autoload.php'); 

use everyman\Neo4j\Client, 
    everyman\Neo4j\Transport; 

$client = new Client(new Transport('localhost', 7474)); 
print_r($client->getServerInfo()); 

Я всегда stumple на ошибки

Fatal error: Cannot instantiate abstract class Everyman\Neo4j\Transport

Googling привел меня на комментарий от Джоша Эдел о том,

You can't instantiate Everyman\Neo4j\Transport, since it is an abstract class. You must instantiate Everyman\Neo4j\Transport\Curl or Everyman\Neo4j\Transport\Stream depending on your needs

Поэтому мне показалось, что мне просто нужно изменить эксплуатационные заявления на

use everyman\Neo4j\Client, 
    everyman\Neo4j\Transport\Curl; 

но это не работает, отладка показывает, что автозагрузчик получает только «Transport.php» вместо «everyman \ Neo4j \ Transport \ Curl.php». Для «Client.php» все еще работает («vendor \ everyman \ Neo4j \ Client.php»), поэтому я предполагаю, что неправильный оператор use или код не способен обрабатывать дополнительную структуру подпапок.

Использование

require('phar://neo4jphp.phar');

работает нормально, но я читал, что это является устаревшим и должен быть заменен композитором/автозагрузку.

У кого-нибудь есть подсказка, что изменить или возникли те же проблемы?

Спасибо за ваше время, Balael

ответ

1

Спасибо, Джош, я пытался, но, похоже, я все еще застрял. Я в порядке с помощью CURL по умолчанию - так что я усаживаюсь код вниз

require('vendor/autoload.php'); 
    use everyman\Neo4j\Client; 
    $client = new Everyman\Neo4j\Client('localhost', 7474); 
    print_r($client->getServerInfo());` 

Структура папок является основной (здесь файлы и композитор.JSON с содержанием

{ 
    "require": { 
     "everyman/Neo4j": "dev-master" 
    } 
} 

и в подкаталоге «поставщик» мы имеем «autoload.php» и подпапки обыватель с релевантным содержанием. Когда я запускаю файл, я выхожу с

Fatal error: Class 'Everyman\Neo4j\Client' not found 

, который не возникает, когда у меня есть автозагрузка. Наверное, я допустил ошибку где-нибудь - не могли бы вы дать мне подсказку? Большое спасибо, B

+0

А, кажется, моя настройка композитора была неправильной, я переделал настройку и теперь ее работоспособность. – Balael

0

Хммм ... Я просто пытался вокруг, и кажется, Транспорт CLASS не требуется в потребительной заявления и класса конкретизации. Это похоже на работу:

require('vendor/autoload.php'); 

    use everyman\Neo4j\Client; 

$client = new Client(); 
print_r($client->getServerInfo()); 

также действительны для наличия выделенного сервера/порт:

$client = new Everyman\Neo4j\Client('localhost', 7474); 

Если у вас есть больший вклад я был бы счастлив, чтобы узнать больше - спасибо, все входные & мысли очень оценили.

Balael

1

Curl является транспортным средством по умолчанию. Вам нужно создать экземпляр собственного объекта транспорта, если вы хотите использовать Stream вместо Curl. Если вы действительно хотите создать экземпляр собственного Curl транспорта, проще всего изменить в существующий код, чтобы изменить использование заявление быть:

use everyman\Neo4j\Client, 
    everyman\Neo4j\Transport\Curl as Transport; 

Кроме того, вам не нужно зарегистрировать свою собственную функцию автозагрузки, если вы используя пакет Composer. vendor/autoload.php делает это за вас.

Смежные вопросы