首頁 >後端開發 >php教程 >使用neo4j添加社交網絡功能

使用neo4j添加社交網絡功能

Jennifer Aniston
Jennifer Aniston原創
2025-02-18 08:59:12221瀏覽

使用neo4j添加社交網絡功能

在最後一部分中,我們了解了NEO4J以及如何將其與PHP一起使用。在這篇文章中,我們將使用這些知識來使用圖形數據庫來構建一個真正的Silex供電社交網絡應用程序。

鑰匙要點

>利用Silex,Twig,Bootstrap和Neoclient為使用NEO4J集成到PHP應用程序中提供了強大的基礎。 Silex框架內Neo4Jclient的配置允許與Neo4J圖形數據庫無縫交互,從而實現了有效的數據檢索和操作。
    >用戶配置文件的實現以及查看用戶遵循的人的能力演示了圖數據庫查詢在管理社會關係中的實際應用。
  • 添加用戶關係功能,例如以下或取消關注其他用戶,在PHP應用程序中處理複雜的社交網絡操作時,展示了Neo4J的動態功能。 >
  • 社交網絡功能的擴展,包括根據現有關係遵循的建議,說明了圖數據庫提供有意義的數據見解和增強用戶參與度的力量。
  • >引導程序
  • >我將使用silex,twig,bootstrap和neoclient來構建應用程序。
  • >
  • >為應用程序創建目錄。我叫我的spsocial。

>將這些行添加到您的composer.json並運行作曲家安裝以安裝依賴項:

您可以下載並安裝Bootstrap到您項目的Web/Assets文件夾中。

>

>您也可以在此處找到Bootstrap演示應用程序:https://github.com/sitepoint-editors/social-network

設置Silex應用程序
<span>{
</span>  <span>"require": {
</span>    <span>"silex/silex": "~1.1",
</span>    <span>"twig/twig": ">=1.8,<2.0-dev",
</span>    <span>"symfony/twig-bridge": "~2.3",
</span>    <span>"neoxygen/neoclient": "~2.1"
</span>
  <span>},
</span>  <span>"autoload": {
</span>    <span>"psr-4": {
</span>      <span>"Ikwattro\SocialNetwork\": "src"
</span>    <span>}
</span>  <span>}
</span><span>}</span>

我們需要配置Silex並聲明Neo4Jclient,因此它將在Silex應用程序中使用。在您的項目的Web/文件夾中創建一個index.php文件:

>

> twig配置為將其模板文件放置在SRC/Views文件夾中。

指向 /已註冊並配置為使用WebController的家庭路由我們將在以後創建。

應用結構應該看起來像這樣:

<span><span><?php
</span></span><span>
</span><span><span>require_once __DIR__.'/../vendor/autoload.php';
</span></span><span>
</span><span><span>use Neoxygen<span>\NeoClient\ClientBuilder</span>;
</span></span><span>
</span><span><span>$app = new Silex<span>\Application</span>();
</span></span><span>
</span><span><span>$app['neo'] = $app->share(function(){
</span></span><span>    <span>$client = ClientBuilder<span>::</span>create()
</span></span><span>        <span>->addDefaultLocalConnection()
</span></span><span>        <span>->setAutoFormatResponse(true)
</span></span><span>        <span>->build();
</span></span><span>
</span><span>    <span>return $client;
</span></span><span><span>});
</span></span><span>
</span><span><span>$app->register(new Silex<span>\Provider\TwigServiceProvider</span>(), array(
</span></span><span>    <span>'twig.path' => __DIR__.'/../src/views',
</span></span><span><span>));
</span></span><span><span>$app->register(new Silex<span>\Provider\MonologServiceProvider</span>(), array(
</span></span><span>    <span>'monolog.logfile' => __DIR__.'/../logs/social.log'
</span></span><span><span>));
</span></span><span><span>$app->register(new Silex<span>\Provider\UrlGeneratorServiceProvider</span>());
</span></span><span>
</span><span><span>$app->get('/', 'Ikwattro\SocialNetwork\Controller\WebController::home')
</span></span><span>    <span>->bind('home');
</span></span><span>
</span><span><span>$app->run();</span></span>


請注意,我在這裡使用Bower安裝bootstrap,但取決於您要使用的內容。

>下一步是用一個內容塊創建我們的基本佈局,我們的兒童樹枝模板將以自己的內容覆蓋。

我將以navault bootstrap為主題,上面有一個納維欄:> 使用neo4j添加社交網絡功能

主頁(檢索所有用戶)

到目前為止,我們在應用程序中有NEO4J可用,我們的基本模板是創建的,我們希望在主頁上列出所有用戶。


我們可以通過兩個步驟來實現這一目標:

  • 創建我們的家庭控制器操作,並從Neo4J
  • 中檢索用戶
  • >將用戶列表傳遞到模板並列出
  • >

控制器操作

<span>{
</span>  <span>"require": {
</span>    <span>"silex/silex": "~1.1",
</span>    <span>"twig/twig": ">=1.8,<2.0-dev",
</span>    <span>"symfony/twig-bridge": "~2.3",
</span>    <span>"neoxygen/neoclient": "~2.1"
</span>
  <span>},
</span>  <span>"autoload": {
</span>    <span>"psr-4": {
</span>      <span>"Ikwattro\SocialNetwork\": "src"
</span>    <span>}
</span>  <span>}
</span><span>}</span>

>控制器顯示了該過程,我們檢索了NEO服務並發布了Cypher查詢以檢索所有用戶。
然後將用戶集合傳遞到index.html.twig模板。

索引模板

<span><span><?php
</span></span><span>
</span><span><span>require_once __DIR__.'/../vendor/autoload.php';
</span></span><span>
</span><span><span>use Neoxygen<span>\NeoClient\ClientBuilder</span>;
</span></span><span>
</span><span><span>$app = new Silex<span>\Application</span>();
</span></span><span>
</span><span><span>$app['neo'] = $app->share(function(){
</span></span><span>    <span>$client = ClientBuilder<span>::</span>create()
</span></span><span>        <span>->addDefaultLocalConnection()
</span></span><span>        <span>->setAutoFormatResponse(true)
</span></span><span>        <span>->build();
</span></span><span>
</span><span>    <span>return $client;
</span></span><span><span>});
</span></span><span>
</span><span><span>$app->register(new Silex<span>\Provider\TwigServiceProvider</span>(), array(
</span></span><span>    <span>'twig.path' => __DIR__.'/../src/views',
</span></span><span><span>));
</span></span><span><span>$app->register(new Silex<span>\Provider\MonologServiceProvider</span>(), array(
</span></span><span>    <span>'monolog.logfile' => __DIR__.'/../logs/social.log'
</span></span><span><span>));
</span></span><span><span>$app->register(new Silex<span>\Provider\UrlGeneratorServiceProvider</span>());
</span></span><span>
</span><span><span>$app->get('/', 'Ikwattro\SocialNetwork\Controller\WebController::home')
</span></span><span>    <span>->bind('home');
</span></span><span>
</span><span><span>$app->run();</span></span>
模板非常輕,它擴展了我們的基本佈局,並在內容繼承的塊中添加了用戶的名稱和姓氏。

啟動內置的PHP服務器並欣賞您的工作:

<span><!DOCTYPE html>
</span><span><html lang="en">
</span><span><head>
</span>    <span><meta charset="utf-8">
</span>    <span><meta http-equiv="X-UA-Compatible" content="IE=edge">
</span>    <span><meta name="viewport" content="width=device-width, initial-scale=1">
</span>    <span><meta name="description" content="">
</span>    <span><meta name="author" content="">
</span>
    <span><title>My first Neo4j application</title>
</span>
    <span><!-- Bootstrap core CSS -->
</span>    <span><link href="{{ app.request.basepath }}/assets/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
</span>    <span><!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
</span>    <span><!--[if lt IE 9]>
</span>    <span><script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
</span>    <span><script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
</span>    <span><![endif]-->
</span>
    <span><style>
</span>        body <span>{ padding-top: 70px; }
</span>    <span></style>
</span><span></head>
</span><span><body>
</span>
<span><div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
</span>    <span><div class="container">
</span>        <span><div class="navbar-header">
</span>            <span><button type="button" id="collbut" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
</span>                <span><span class="sr-only">Toggle navigation</span>
</span>                <span><span class="icon-bar"></span>
</span>                <span><span class="icon-bar"></span>
</span>                <span><span class="icon-bar"></span>
</span>            <span></button>
</span>            <span><a class="navbar-brand" href="#">My first Neo4j application</a>
</span>        <span></div>
</span>    <span></div>
</span><span></div>
</span>
<span><div class="container-fluid">
</span>
    <span>{% block content %}
</span>
    <span>{% endblock content %}
</span>
<span></div>
</span><span></body>
</span><span></html></span>

使用neo4j添加社交網絡功能社交網絡功能:顯示用戶遵循誰

>現在我們要單擊用戶,並向他介紹他的詳細信息和他關注的用戶。

>步驟1:在index.php

中創建路由

>步驟2:創建Showuser Controller Action

<span><span><?php
</span></span><span>
</span><span><span>namespace Ikwattro<span>\SocialNetwork\Controller</span>;
</span></span><span>
</span><span><span>use Silex<span>\Application</span>;
</span></span><span><span>use Symfony<span>\Component\HttpFoundation\Request</span>;
</span></span><span>
</span><span><span>class WebController
</span></span><span><span>{
</span></span><span>
</span><span>    <span>public function home(Application $application, Request $request)
</span></span><span>    <span>{
</span></span><span>        <span>$neo = $application['neo'];
</span></span><span>        <span>$q = 'MATCH (user:User) RETURN user';
</span></span><span>        <span>$result = $neo->sendCypherQuery($q)->getResult();
</span></span><span>
</span><span>        <span>$users = $result->get('user');
</span></span><span>
</span><span>        <span>return $application['twig']->render('index.html.twig', array(
</span></span><span>            <span>'users' => $users
</span></span><span>        <span>));
</span></span><span>    <span>}
</span></span><span><span>}</span></span>

工作流與任何其他應用程序相似,您嘗試根據登錄方式找到用戶。

如果不存在,則顯示一個404錯誤頁面,否則您將用戶數據傳遞到模板。
{% extends "layout.html.twig" %}

{% block content %}
    <span><span><span><ul</span> class<span>="list-unstyled"</span>></span>
</span>        {% for user in users %}
            <span><span><span><li</span>></span>{{ user.property('firstname') }} {{ user.property('lastname') }}<span><span></li</span>></span>
</span>        {% endfor %}
    <span><span><span></ul</span>></span>
</span>{% endblock %}
步驟3:創建Show_user模板文件


>步驟4:重構主頁中的用戶列表以顯示其配置文件

的鏈接

<span>cd spsocial/web
</span>php <span>-S localhost:8000
</span><span>open localhost:8000</span>
>刷新主頁,然後單擊任何用戶以顯示其個人資料和關注用戶列表

>

<span>$app->get('/user/{login}', 'Ikwattro\SocialNetwork\Controller\WebController::showUser')
</span>    <span>->bind('show_user');</span>

添加建議

使用neo4j添加社交網絡功能>下一步是向配置文件提供建議。我們需要通過添加可選的匹配來稍微擴展控制器中的Cypher查詢,以根據第二度網絡找到建議。

>可選前綴會導致匹配返回一行,即使沒有匹配項,但非分辨零件設置為null(就像外部連接一樣)。由於我們有可能為每個朋友(FOF)獲得多個途徑,因此我們需要區分結果以避免在我們的列表中重複(收集是一個將值收集到數組中的聚合操作):

>

更新的控制器:

更新的模板:

您可以立即探索應用程序中的建議:
<span>public function showUser(Application $application, Request $request, $login)
</span>    <span>{
</span>        <span>$neo = $application['neo'];
</span>        <span>$q = 'MATCH (user:User) WHERE user.login = {login}
</span><span>         OPTIONAL MATCH (user)-[:FOLLOWS]->(f)
</span><span>         RETURN user, collect(f) as followed';
</span>        <span>$p = ['login' => $login];
</span>        <span>$result = $neo->sendCypherQuery($q, $p)->getResult();
</span>
        <span>$user = $result->get('user');
</span>        <span>$followed = $result->get('followed');
</span>
        <span>if (null === $user) {
</span>            <span>$application->abort(404, 'The user $login was not found');
</span>        <span>}
</span>
        <span>return $application['twig']->render('show_user.html.twig', array(
</span>            <span>'user' => $user,
</span>            <span>'followed' => $followed
</span>        <span>));
</span>    <span>}</span>

{% extends "layout.html.twig" %}

{% block content %}
    <span><span><span><h1</span>></span>User informations<span><span></h1</span>></span>
</span>
    <span><span><span><h2</span>></span>{{ user.property('firstname') }} {{ user.property('lastname') }}<span><span></h2</span>></span>
</span>    <span><span><span><h3</span>></span>{{ user.property('login') }}<span><span></h3</span>></span>
</span>    <span><span><span><hr</span>/></span>
</span>
    <span><span><span><div</span> class<span>="row"</span>></span>
</span>        <span><span><span><div</span> class<span>="col-sm-6"</span>></span>
</span>            <span><span><span><h4</span>></span>User <span><span><span</span> class<span>="label label-info"</span>></span>{{ user.property('login') }}<span><span></span</span>></span> follows :<span><span></h4</span>></span>
</span>            <span><span><span><ul</span> class<span>="list-unstyled"</span>></span>
</span>                {% for follow in followed %}
                    <span><span><span><li</span>></span>{{ follow.property('login') }} ( {{ follow.property('firstname') }} {{ follow.property('lastname') }} )<span><span></li</span>></span>
</span>                {% endfor %}
            <span><span><span></ul</span>></span>
</span>        <span><span><span></div</span>></span>
</span>    <span><span><span></div</span>></span>
</span>
{% endblock %}

連接到用戶(添加關係)

>為了連接到建議的用戶,我們將向每個建議的用戶添加一個郵政鏈接,其中包含兩個用戶作為隱藏字段。我們還將創建相應的路線和控制器操作。 使用neo4j添加社交網絡功能>

創建路線:

控制器動作:

<span>{
</span>  <span>"require": {
</span>    <span>"silex/silex": "~1.1",
</span>    <span>"twig/twig": ">=1.8,<2.0-dev",
</span>    <span>"symfony/twig-bridge": "~2.3",
</span>    <span>"neoxygen/neoclient": "~2.1"
</span>
  <span>},
</span>  <span>"autoload": {
</span>    <span>"psr-4": {
</span>      <span>"Ikwattro\SocialNetwork\": "src"
</span>    <span>}
</span>  <span>}
</span><span>}</span>

>在這裡沒什麼不尋常的,我們匹配了開始用戶節點和目標用戶節點,然後我們合併了相應的後面關係。我們在關係上使用合併來避免重複的條目。

模板:

<span><span><?php
</span></span><span>
</span><span><span>require_once __DIR__.'/../vendor/autoload.php';
</span></span><span>
</span><span><span>use Neoxygen<span>\NeoClient\ClientBuilder</span>;
</span></span><span>
</span><span><span>$app = new Silex<span>\Application</span>();
</span></span><span>
</span><span><span>$app['neo'] = $app->share(function(){
</span></span><span>    <span>$client = ClientBuilder<span>::</span>create()
</span></span><span>        <span>->addDefaultLocalConnection()
</span></span><span>        <span>->setAutoFormatResponse(true)
</span></span><span>        <span>->build();
</span></span><span>
</span><span>    <span>return $client;
</span></span><span><span>});
</span></span><span>
</span><span><span>$app->register(new Silex<span>\Provider\TwigServiceProvider</span>(), array(
</span></span><span>    <span>'twig.path' => __DIR__.'/../src/views',
</span></span><span><span>));
</span></span><span><span>$app->register(new Silex<span>\Provider\MonologServiceProvider</span>(), array(
</span></span><span>    <span>'monolog.logfile' => __DIR__.'/../logs/social.log'
</span></span><span><span>));
</span></span><span><span>$app->register(new Silex<span>\Provider\UrlGeneratorServiceProvider</span>());
</span></span><span>
</span><span><span>$app->get('/', 'Ikwattro\SocialNetwork\Controller\WebController::home')
</span></span><span>    <span>->bind('home');
</span></span><span>
</span><span><span>$app->run();</span></span>

>您現在可以單擊您要關注的建議用戶的關注按鈕:

>

使用neo4j添加社交網絡功能

刪除關係:

刪除關係的工作流與添加新關係,創建路線,控制器操作並調整佈局幾乎相同:

路線:

<span><!DOCTYPE html>
</span><span><html lang="en">
</span><span><head>
</span>    <span><meta charset="utf-8">
</span>    <span><meta http-equiv="X-UA-Compatible" content="IE=edge">
</span>    <span><meta name="viewport" content="width=device-width, initial-scale=1">
</span>    <span><meta name="description" content="">
</span>    <span><meta name="author" content="">
</span>
    <span><title>My first Neo4j application</title>
</span>
    <span><!-- Bootstrap core CSS -->
</span>    <span><link href="{{ app.request.basepath }}/assets/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
</span>    <span><!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
</span>    <span><!--[if lt IE 9]>
</span>    <span><script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
</span>    <span><script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
</span>    <span><![endif]-->
</span>
    <span><style>
</span>        body <span>{ padding-top: 70px; }
</span>    <span></style>
</span><span></head>
</span><span><body>
</span>
<span><div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
</span>    <span><div class="container">
</span>        <span><div class="navbar-header">
</span>            <span><button type="button" id="collbut" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse">
</span>                <span><span class="sr-only">Toggle navigation</span>
</span>                <span><span class="icon-bar"></span>
</span>                <span><span class="icon-bar"></span>
</span>                <span><span class="icon-bar"></span>
</span>            <span></button>
</span>            <span><a class="navbar-brand" href="#">My first Neo4j application</a>
</span>        <span></div>
</span>    <span></div>
</span><span></div>
</span>
<span><div class="container-fluid">
</span>
    <span>{% block content %}
</span>
    <span>{% endblock content %}
</span>
<span></div>
</span><span></body>
</span><span></html></span>

控制器動作:

<span><span><?php
</span></span><span>
</span><span><span>namespace Ikwattro<span>\SocialNetwork\Controller</span>;
</span></span><span>
</span><span><span>use Silex<span>\Application</span>;
</span></span><span><span>use Symfony<span>\Component\HttpFoundation\Request</span>;
</span></span><span>
</span><span><span>class WebController
</span></span><span><span>{
</span></span><span>
</span><span>    <span>public function home(Application $application, Request $request)
</span></span><span>    <span>{
</span></span><span>        <span>$neo = $application['neo'];
</span></span><span>        <span>$q = 'MATCH (user:User) RETURN user';
</span></span><span>        <span>$result = $neo->sendCypherQuery($q)->getResult();
</span></span><span>
</span><span>        <span>$users = $result->get('user');
</span></span><span>
</span><span>        <span>return $application['twig']->render('index.html.twig', array(
</span></span><span>            <span>'users' => $users
</span></span><span>        <span>));
</span></span><span>    <span>}
</span></span><span><span>}</span></span>

>您可以在這裡看到我使用匹配以找到兩個用戶之間的關係 我在關係中添加了一個標識符,以便能夠刪除它。
>

模板:

{% extends "layout.html.twig" %}

{% block content %}
    <span><span><span><ul</span> class<span>="list-unstyled"</span>></span>
</span>        {% for user in users %}
            <span><span><span><li</span>></span>{{ user.property('firstname') }} {{ user.property('lastname') }}<span><span></li</span>></span>
</span>        {% endfor %}
    <span><span><span></ul</span>></span>
</span>{% endblock %}
您現在可以單擊每個關注的用戶下的“刪除關係”按鈕:

使用neo4j添加社交網絡功能

結論

圖形數據庫非常適合關係數據,並且將其與PHP和NeoClient一起使用很容易。

Cypher是一種方便的查詢語言,您會很快喜歡,因為可以自然地查詢圖形。
>

使用圖形數據庫對現實世界數據有很多好處 我邀請您通過閱讀手冊http://neo4j.com/docs/stable/,

來發現更多信息。 查看Neo4J用戶提供的用例和示例,並在Twitter上關注 @neo4j。
>使用neo4j
>將社交網絡功能添加到PHP應用程序的常見問題

什麼是neo4j,為什麼在PHP應用程序中它很重要?它在PHP應用程序中很重要,因為它允許開發人員使用其圖形數據模型存儲,管理和查詢數據。借助Neo4J,您可以實時處理和分析大量數據,使其非常適合在PHP應用程序中構建社交網絡功能。

>

如何為我的PHP應用程序安裝和配置NEO4J?

要安裝neo4j,您需要從官方網站下載最新版本,並按照安裝說明進行操作。安裝後,您可以通過編輯通常位於Neo4J安裝的“ conf”目錄中的配置文件來配置它。然後,您可以使用Neo4J PHP客戶端將其連接到您的PHP應用程序。

> PHP 7.4、8.1和8.3中可以增強我的應用程序的新功能是什麼? PHP 8.1帶來了枚舉,纖維和僅閱讀特性。 PHP 8.3雖然尚未發布,但有望引入新功能,以進一步增強您的應用程序。這些功能可以改善您的PHP應用程序的性能,可讀性和可維護性。

>

>如何使用neo4j?

>

>在PHP應用程序中添加社交網絡功能使用Neo4J涉及創建圖形數據庫,定義節點之間的關係並查詢數據庫。您可以使用Cypher,Neo4J的查詢語言,與PHP應用程序中的圖形數據庫進行交互。

>

>在社交網絡功能上使用neo4j勝過其他數據庫有什麼好處?與其他類型的數據庫相比,圖形數據庫本質上更適合社交網絡功能。它允許對社交網絡中常見的複雜關係進行有效的查詢和處理。它還提供了高性能,可伸縮性和靈活性。

>

如何將我的PHP應用程序遷移到較新版本?

將您的PHP應用程序遷移到較新版本涉及更新您的PHP安裝,更新您的代碼以刪除不棄用的功能並使用新功能,並測試您的應用程序以確保其正常工作。建議在將更改應用於生產環境之前先在開發環境中進行此操作。

>在將社交網絡功能添加到PHP應用程序中時有什麼共同的挑戰,我該如何克服它們? 🎜>一些常見的挑戰包括處理大量數據,管理複雜的關係以及確保實時績效。可以通過使用諸如neo4j之類的合適數據庫,優化查詢以及使用有效的數據結構和算法來克服這些。

>

>如何使用neo4j?

>

>您如何優化我的PHP應用程序的性能可以通過使用有效的查詢,索引數據以及使用Neo4J的內部性能調整功能來優化使用NEO4J的PHP應用程序的性能。您還可以使用PHP的性能增強功能,例如JIT編譯和預加載。

>

>如何使用neo4j?

>>

>您可以通過使用Safe Secure使用Neo4J使用Neo4J來保護您的PHP應用程序。連接,實施身份驗證和授權以及使用NEO4J的內置安全功能。您還應遵循最佳實踐,以實現PHP安全性,例如驗證輸入,使用準備好的語句以及保持PHP安裝的最新時間。

>

我在哪裡可以找到有關將NEO4J與PHP一起使用的更多資源?也有許多在線課程,書籍和博客深入涵蓋此主題。

>

以上是使用neo4j添加社交網絡功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn