id009/neo4jbundle

此包将Neo4j OGM库集成到Symfony中,包括基本的用户提供者和表单集成

安装: 53

依赖: 1

建议者: 0

安全: 0

星标: 3

关注者: 2

分支: 1

开放问题: 0

类型:symfony-bundle

dev-master 2013-05-18 12:49 UTC

This package is not auto-updated.

Last update: 2024-09-28 14:06:57 UTC


README

提供与Symfony的集成Neo4j PHP对象图映射器

使用Composer安装

要安装此包,只需将以下行添加到您的composer.json文件的"require"部分:"id009/neo4jbundle": "dev-master"

运行php composer.phar update命令。更新完成后,在您的AppKernel.php中注册此包

// app/AppKernel.php
public function registerBundles()
{
    $bundles = array(
        // ...
        new id009\Neo4jBundle\id009Neo4jBundle(),
    );
    // ...
}

配置

要完成包安装,您需要配置设置实体管理和连接。下面是一个相当完整的配置示例。

id009_neo4j:
  connections:
        default:
            host: localhost
            port: 7474
            username: user
            password: pass
    entity_managers:
        default:
            debug: true
            #For pathfinding algorithms refer to Everyman\Neo4j\PathFinder
            pathfinder_algorithm: allSimplePaths
            pathfinder_maxdepth: 5

但在大多数情况下,您可能需要类似下面的配置

id009_neo4j:
    connections:
        default:
    entity_managers:
        default:

这就完了。在上述配置中,默认主机为localhost,端口号为7474。调试模式来自全局调试参数。现在,在包安装和配置正确后,您就可以开始使用了。

基本用法

请参阅Neo4j PHP对象图映射器的readme文件,了解OGM的工作方式。

如果您处理过Doctrine ORM包,您会发现Neo4j Bundle的基本用法非常简单。

// Your controller...
$em = $this->get('id009_neo4j.entity_manager');
// Now you have an instance of HireVoice\Neo4j\EntityManager class. You can do whatever you want with it.
$em->getRepository('Acme\AcmeBundle\Entity')->findOneByUsername('ivanpetrov99'); // and so on...

安全

此包提供基本的OGMUser类和安全提供者,它们与cookbook中描述的实体提供者功能相同。下面是基本的安全配置示例。

providers:
      neo4j_provider:
          neo4j: {class: id009\Neo4jBundle\Security\User\OGMUser}

表单

如果没有与Symfony表单的集成,此包将不足以使用。让我们看看如何使用它。

例如,您有一个Person和City类,如下所示。

// Acme\AcmeBundle\Entity\Person

/**
 * @OGM\Entity
 */
class Person
{
    //...

    /**
     * @OGM\ManyToOne
     */
    protected $city;

    //...
}

// Acme\AcmeBundle\Entity\City

/**
 * @OGM\Entity
 */
class City
{
    //...
}

在编辑Person时选择City,这是一个不错的主意,对吧?下面是一个示例

// Acme\AcmeBundle\Form\Type\PersonType

public function buildForm(FormBuilderInterface $builder, array $options)
{
    //...

    $builder->add('city', null, array(
        'class' => 'Acme\AcmeBundle\Entity\City'
    ));

    //...
}

表单类型将被自动检测为neo4j_entity,并带有选项array('multiple' => false, 'expanded' => false),它将渲染为下拉列表。

事件

OGM提供三种类型的事件

  • 实体创建
  • 关系创建
  • 查询执行

请参阅HireVoice\Neo4j\EntityManager以获取有关这些事件的详细信息。

如果您想订阅这些事件,可以创建自己的Subscriber类,该类实现了Symfony\Component\EventDispatcher\EventSubscriberInterface。但为了方便起见,此包提供了一个抽象类id009\Neo4jBundle\Event\AbstractSubscriber,您可以从它继承您的订阅者。例如

namespace Acme\AcmeBundle\Event

//...

class MySubscriber extends AbstractSubscriber
{
    public function onEntityCreate($entity)
    {
        //...
    }

    public function onRelationCreate($relation, $a, $b, $relationship)
    {
        //...
    }

    public function onQueryRun($query, $parameters, $time)
    {
        //...
    }
}

现在,在您的订阅者完成之后,在您的services.yml文件中注册它

acme_acmebundle.event.subscriber:
    class: 'Acme\AcmeBundle\Event\MySubscriber'
    tags:
        - {name: id009_neo4j.subscriber}

如果您在项目中使用了多个实体管理器,只需在标签中添加带有实体管理器名称的属性manager

贡献者

Alex Belyaev @lex009

您随时欢迎贡献!

我将非常感激任何反馈。

许可证

MIT