0

也许是一个简单的问题,但对我来说作为 Neo4j 的初学者来说是一个障碍。我在与我的应用程序相同的目录中安装了带有 composer 的 neo4jphp。Vendor-Subfolder 已创建,下面的everyman/neo4j 文件夹可用。对于第一个测试,我使用了示例中的代码片段:

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()); 

我总是偶然发现错误

致命错误:无法实例化抽象类 Everyman\Neo4j\Transport

谷歌搜索让我看到了 Josh Adell 的评论,他说

您不能实例化 Everyman\Neo4j\Transport,因为它是一个抽象类。您必须根据需要实例化 Everyman\Neo4j\Transport\Curl 或 Everyman\Neo4j\Transport\Stream

所以我想我只需要将使用语句更改为

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

但这不起作用,调试显示,自动加载器只得到“Transport.php”而不是“everyman\Neo4j\Transport\Curl.php”。对于“Client.php”它仍然有效(“vendor\everyman\Neo4j\Client.php”)所以我猜测使用语句是错误的或者代码无法处理额外的子文件夹结构。

使用

要求('phar://neo4jphp.phar');

工作正常,但我读到这已被弃用,应该由作曲家/自动加载取代。

任何人都暗示要改变什么或有同样的问题?

谢谢你的时间,巴莱尔

4

3 回答 3

1

卷曲是默认传输。如果你想使用 Stream 而不是 Curl,你只需要实例化你自己的 Transport 对象。如果您真的想实例化自己的 Curl Transport,对现有代码的最简单更改是将 use 语句修改为:

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

此外,如果您使用 Composer 包,则无需注册自己的自动加载功能。vendor/autoload.php为你做。

于 2014-10-27T00:51:00.473 回答
1

谢谢乔希,我正在尝试,但似乎我仍然卡在某个地方。我可以使用默认的 CURL - 所以我将代码缩小到

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

文件夹结构是主要的(这里是文件和带有内容的 composer.json

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

在子文件夹“vendor”中,我们有“autoload.php”和带有相关内容的子文件夹everyman。当我运行文件时,我得到了

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

当我有自动加载功能时不会发生这种情况。我想我在某个地方犯了一个错误——你能给我一个提示吗?非常感谢,B

于 2014-10-27T13:58:21.420 回答
0

嗯...我只是在尝试,似乎在使用语句和类实例化中不需要传输类。这似乎有效:

require('vendor/autoload.php'); 

    use everyman\Neo4j\Client;

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

也适用于拥有专用服务器/端口:

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

如果你有更多的意见,我很乐意了解更多 - 谢谢,所有的意见和想法都非常感谢。

巴莱尔

于 2014-10-26T20:01:55.400 回答