0

我正在尝试阅读本教程:http ://www.sitepoint.com/adding-social-network-features-php-app-neo4j/但使用 Symfony 框架而不是 Silex。

我已经能够将 Neo4j 设置为与 Symfony 一起运行,并且能够将用户数据正确地添加到图表中。现在我想在列表中显示所有用户的电子邮件地址。我采用了这个脚本:

 public function home(Application $application, Request $request)
    {
        $neo = $application['neo'];
        $q = 'MATCH (user:User) RETURN user';
        $result = $neo->sendCypherQuery($q)->getResult();

        $users = $result->get('user');

        return $application['twig']->render('index.html.twig', array(
            'users' => $users
        ));
    }

并将其改编为:

   public function showUsersAction()
    {
        $em = $this->container->get('neo4j.manager');
        $query = 'MATCH (n:`User`) RETURN n';
        $users = $em->cypherQuery($query);

        //print_r($users);
        return $this->render('UserBundle:Account:showUsers.html.twig', array('users' =>$users));
    }

树枝看起来如下:

{% extends '::base.html.twig' %}
{% block content %}
    <h1>get all users:</h1>
    <ul>
    {% for user in users %}
        <li>{{ user.property('email') }}</li>
    {% endfor %}
    </ul>
{% endblock %}

但是树枝中的某些东西是错误的,我得到了错误:

Method "property" for object "Everyman\Neo4j\Query\Row" does not exist in UserBundle:Account:showUsers.html.twig at line 6 
4

2 回答 2

1

在 twig 文件的语法中发现了问题。查阅此页面后:https ://github.com/jadell/neo4jphp/wiki/Cypher-and-gremlin-queries很明显,我必须将其包含user['n']在我的树枝模板中。树枝模板现在看起来像这样:

{% extends '::base.html.twig' %}
{% block content %}
    <h1>get all users:</h1>
    <ul>
    {% for user in users %}
        <li>{{ user['n'].getProperty('email') }}</li>
    {% endfor %}
    </ul>
{% endblock %}
于 2015-07-09T13:40:42.297 回答
1

我是你提到的那篇文章的作者。问题是您使用的 neo4j 库与文章中使用的库不同,因此是neoclient,因此文章中使用的方法与 neo4jphp 提供的方法不同。

由于 NeoClient 大量使用 Symfony 组件,因此将其集成到 Symfony 中非常容易,您只需覆盖 DI。此处示例:https ://github.com/graphaware/GithubNeo4j/tree/master/src/GraphAware/Neo4jBundle

然后,您将能够使用我在 Sitepoint 上写的 3 篇文章中说明的方法。

所以你的twig模板的问题是他没有找到getProperty节点对象类的方法,这很正常,因为neo4jphp返回Row对象类。

如果您切换回 neoclient,如文章中所述,您可以在 Twig 模板中编写:

{% for user in users %}
   <li>{{ user.getProperty('email') }}</li>
{% endfor %}
于 2015-07-09T16:43:57.050 回答