鑰匙要點
>利用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, <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>
我們需要配置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></span>
請注意,我在這裡使用Bower安裝bootstrap,但取決於您要使用的內容。
我將以navault bootstrap為主題,上面有一個納維欄:
到目前為止,我們在應用程序中有NEO4J可用,我們的基本模板是創建的,我們希望在主頁上列出所有用戶。
我們可以通過兩個步驟來實現這一目標:
- 創建我們的家庭控制器操作,並從Neo4J 中檢索用戶
- >將用戶列表傳遞到模板並列出 >
控制器操作
<span>{ </span> <span>"require": { </span> <span>"silex/silex": "~1.1", </span> <span>"twig/twig": ">=1.8, <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>
>控制器顯示了該過程,我們檢索了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></span>模板非常輕,它擴展了我們的基本佈局,並在內容繼承的塊中添加了用戶的名稱和姓氏。
啟動內置的PHP服務器並欣賞您的工作:
<span> </span><span> </span><span> </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="%7B%7B%20app.request.basepath%20%7D%7D/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> </style></span> body <span>{ padding-top: 70px; } </span> <span> </span><span> </span><span> </span> <span><div class="navbar navbar-inverse navbar-fixed-top" role="navigation"> <span><div class="container"> <span><div class="navbar-header"> <span><button type="button" id="collbut" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse"> </button></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> </span> <span><a class="navbar-brand" href="#">My first Neo4j application</a> </span> <span></span> </div> </span> <span></span> </div> </span><span></span> </div> </span> <span><div class="container-fluid"> <span>{% block content %} </span> <span>{% endblock content %} </span> <span></span> </div> </span><span> </span><span></span>
社交網絡功能:顯示用戶遵循誰
>現在我們要單擊用戶,並向他介紹他的詳細信息和他關注的用戶。
>步驟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></span>
工作流與任何其他應用程序相似,您嘗試根據登錄方式找到用戶。
如果不存在,則顯示一個404錯誤頁面,否則您將用戶數據傳遞到模板。{% extends "layout.html.twig" %} {% block content %} <span><span><span><ul> class<span>="list-unstyled"</span>></ul></span> </span> {% for user in users %} <span><span><span><li>></li></span>{{ user.property('firstname') }} {{ user.property('lastname') }}<span><span></span>></span> </span> {% endfor %} <span><span><span></span>></span> </span>{% endblock %}</span></span>步驟3:創建Show_user模板文件
的鏈接
<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>
添加建議
>下一步是向配置文件提供建議。我們需要通過添加可選的匹配來稍微擴展控制器中的Cypher查詢,以根據第二度網絡找到建議。
>
更新的控制器:
更新的模板:
您可以立即探索應用程序中的建議:
<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 id="gt">></h1></span>User informations<span><span></span>></span> </span> <span><span><span><h2 id="gt">></h2></span>{{ user.property('firstname') }} {{ user.property('lastname') }}<span><span></span>></span> </span> <span><span><span><h3 id="gt">></h3></span>{{ user.property('login') }}<span><span></span>></span> </span> <span><span><span><hr>/></span> </span> <span><span><span><div> class<span>="row"</span>> <span><span><span><div> class<span>="col-sm-6"</span>> <span><span><span><h4 id="gt">></h4></span>User <span><span><span> class<span>="label label-info"</span>></span>{{ user.property('login') }}<span><span></span></span>></span> follows :<span><span></span>></span> </span> <span><span><span><ul> class<span>="list-unstyled"</span>></ul></span> </span> {% for follow in followed %} <span><span><span><li>></li></span>{{ follow.property('login') }} ( {{ follow.property('firstname') }} {{ follow.property('lastname') }} )<span><span></span>></span> </span> {% endfor %} <span><span><span></span>></span> </span> <span><span><span></span></span></span></span></span></span></span> </div></span>></span> </span> <span><span><span></span></span></span> </div></span>></span> </span> {% endblock %}</span></span></span></span>
連接到用戶(添加關係)
>為了連接到建議的用戶,我們將向每個建議的用戶添加一個郵政鏈接,其中包含兩個用戶作為隱藏字段。我們還將創建相應的路線和控制器操作。 >
控制器動作:
<span>{ </span> <span>"require": { </span> <span>"silex/silex": "~1.1", </span> <span>"twig/twig": ">=1.8, <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><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></span>
>您現在可以單擊您要關注的建議用戶的關注按鈕:
>
刪除關係:
刪除關係的工作流與添加新關係,創建路線,控制器操作並調整佈局幾乎相同:
:路線:
<span> </span><span> </span><span> </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="%7B%7B%20app.request.basepath%20%7D%7D/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> </style></span> body <span>{ padding-top: 70px; } </span> <span> </span><span> </span><span> </span> <span><div class="navbar navbar-inverse navbar-fixed-top" role="navigation"> <span><div class="container"> <span><div class="navbar-header"> <span><button type="button" id="collbut" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse"> </button></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> </span> <span><a class="navbar-brand" href="#">My first Neo4j application</a> </span> <span></span> </div> </span> <span></span> </div> </span><span></span> </div> </span> <span><div class="container-fluid"> <span>{% block content %} </span> <span>{% endblock content %} </span> <span></span> </div> </span><span> </span><span></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></span>
>您可以在這裡看到我使用匹配以找到兩個用戶之間的關係
我在關係中添加了一個標識符,以便能夠刪除它。
>
{% extends "layout.html.twig" %} {% block content %} <span><span><span><ul> class<span>="list-unstyled"</span>></ul></span> </span> {% for user in users %} <span><span><span><li>></li></span>{{ user.property('firstname') }} {{ user.property('lastname') }}<span><span></span>></span> </span> {% endfor %} <span><span><span></span>></span> </span>{% endblock %}</span></span>您現在可以單擊每個關注的用戶下的“刪除關係”按鈕:
圖形數據庫非常適合關係數據,並且將其與PHP和NeoClient一起使用很容易。
Cypher是一種方便的查詢語言,您會很快喜歡,因為可以自然地查詢圖形。
>
來發現更多信息。
查看Neo4J用戶提供的用例和示例,並在Twitter上關注 @neo4j。
>使用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?
>
>在社交網絡功能上使用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中文網其他相關文章!

Thedifferencebetweenunset()andsession_destroy()isthatunset()clearsspecificsessionvariableswhilekeepingthesessionactive,whereassession_destroy()terminatestheentiresession.1)Useunset()toremovespecificsessionvariableswithoutaffectingthesession'soveralls

stickysessensureuserRequestSarerOutedTothesMeServerForsessionDataConsisterency.1)sessionIdentificeAssificationAssigeaSsignAssignSignSuserServerServerSustersusiseCookiesorUrlModifications.2)一致的ententRoutingDirectSsssssubsequeSssubsequeSubsequestrequestSameSameserver.3)loadBellankingDisteributesNebutesneNewuserEreNevuseRe.3)

phpoffersvarioussessionsionsavehandlers:1)文件:默認,簡單的ButMayBottLeneckonHigh-trafficsites.2)Memcached:高性能,Idealforsforspeed-Criticalapplications.3)REDIS:redis:similartomemememememcached,withddeddeddedpassistence.4)withddeddedpassistence.4)databases:gelifforcontrati forforcontrati,有用

PHP中的session是用於在服務器端保存用戶數據以在多個請求之間保持狀態的機制。具體來說,1)session通過session_start()函數啟動,並通過$_SESSION超級全局數組存儲和讀取數據;2)session數據默認存儲在服務器的臨時文件中,但可通過數據庫或內存存儲優化;3)使用session可以實現用戶登錄狀態跟踪和購物車管理等功能;4)需要注意session的安全傳輸和性能優化,以確保應用的安全性和效率。

PHPsessionsstartwithsession_start(),whichgeneratesauniqueIDandcreatesaserverfile;theypersistacrossrequestsandcanbemanuallyendedwithsession_destroy().1)Sessionsbeginwhensession_start()iscalled,creatingauniqueIDandserverfile.2)Theycontinueasdataisloade

絕對會話超時從會話創建時開始計時,閒置會話超時則從用戶無操作時開始計時。絕對會話超時適用於需要嚴格控制會話生命週期的場景,如金融應用;閒置會話超時適合希望用戶長時間保持會話活躍的應用,如社交媒體。

服務器會話失效可以通過以下步驟解決:1.檢查服務器配置,確保會話設置正確。 2.驗證客戶端cookies,確認瀏覽器支持並正確發送。 3.檢查會話存儲服務,如Redis,確保其正常運行。 4.審查應用代碼,確保會話邏輯正確。通過這些步驟,可以有效診斷和修復會話問題,提升用戶體驗。

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver CS6
視覺化網頁開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

禪工作室 13.0.1
強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。