鑰匙要點
您可以下載並安裝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文件夾中。
<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可用,我們的基本模板是創建的,我們希望在主頁上列出所有用戶。
我們可以通過兩個步驟來實現這一目標:
<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>
社交網絡功能:顯示用戶遵循誰
中創建路由
>步驟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模板文件
的鏈接
<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</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 %}
連接到用戶(添加關係)
>為了連接到建議的用戶,我們將向每個建議的用戶添加一個郵政鏈接,其中包含兩個用戶作為隱藏字段。我們還將創建相應的路線和控制器操作。 >
控制器動作:
<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>
>您現在可以單擊您要關注的建議用戶的關注按鈕:
>
刪除關係:
刪除關係的工作流與添加新關係,創建路線,控制器操作並調整佈局幾乎相同:
:路線:
<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 %}您現在可以單擊每個關注的用戶下的“刪除關係”按鈕:
Cypher是一種方便的查詢語言,您會很快喜歡,因為可以自然地查詢圖形。
>
來發現更多信息。
查看Neo4J用戶提供的用例和示例,並在Twitter上關注 @neo4j。
>使用neo4j
>將社交網絡功能添加到PHP應用程序的常見問題
>如何使用neo4j?
>
>在社交網絡功能上使用neo4j勝過其他數據庫有什麼好處?與其他類型的數據庫相比,圖形數據庫本質上更適合社交網絡功能。它允許對社交網絡中常見的複雜關係進行有效的查詢和處理。它還提供了高性能,可伸縮性和靈活性。>
>如何使用neo4j? > >您如何優化我的PHP應用程序的性能可以通過使用有效的查詢,索引數據以及使用Neo4J的內部性能調整功能來優化使用NEO4J的PHP應用程序的性能。您還可以使用PHP的性能增強功能,例如JIT編譯和預加載。>>
>您可以通過使用Safe Secure使用Neo4J使用Neo4J來保護您的PHP應用程序。連接,實施身份驗證和授權以及使用NEO4J的內置安全功能。您還應遵循最佳實踐,以實現PHP安全性,例如驗證輸入,使用準備好的語句以及保持PHP安裝的最新時間。以上是使用neo4j添加社交網絡功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!