Heim > Backend-Entwicklung > PHP-Tutorial > So erstellen Sie einen Pokemon Spawn -Standorte -Recorder mit CouchDB

So erstellen Sie einen Pokemon Spawn -Standorte -Recorder mit CouchDB

Joseph Gordon-Levitt
Freigeben: 2025-02-10 12:01:13
Original
658 Leute haben es durchsucht

So erstellen Sie einen Pokemon Spawn -Standorte -Recorder mit CouchDB

In einem früheren Artikel wurden Sie CouchDB vorgestellt. Dieses Mal erstellen Sie eine vollwertige App, in der Sie die von Ihnen gelernten Dinge anwenden können. Sie lernen auch, wie Sie Ihre Datenbank am Ende des Tutorials sichern.

Key Takeaways

  • Verwenden Sie CouchDB, das mit dem Geocouch -Plugin verbessert wurde, um Geospatial -Daten über Pokemon Spawn -Standorte effizient aufzunehmen und abzurufen.
  • Richten Sie eine robuste Entwicklungsumgebung mit Verbesserung des Homestead ein und docker, um Abhängigkeiten zu verarbeiten und eine konsistente Entwicklungseinstellung für verschiedene Maschinen zu gewährleisten.
  • Implementieren Sie das schlanke Framework und zusätzliche PHP
  • sichern Sie Ihre CouchDB -Installation, indem Sie Server -Administratoren und Datenbank -Administratoren einrichten, um unbefugten Zugriff und Änderungen an Ihrer Datenbank zu verhindern.
  • Verwenden Sie die Google Maps -API, damit Benutzer die genauen Positionen von Pokemon Spawns bestimmen und speichern können, wodurch die Interaktivität und Funktionalität der App verbessert wird.
  • Implementieren Sie Frontend -Funktionen mit JavaScript und verschiedenen Bibliotheken, um eine reaktionsschnelle Benutzeroberfläche anzubieten, einschließlich Karteninteraktionen, Standortsuche und modaler Windows für die Dateneingabe.
  • Stellen Sie sicher, dass die Anwendung sicher ist, indem die .EnV -Datei mit CouchDB -Anmeldeinformationen aktualisiert und der DB -Klasse -Konstruktor geändert wird, um diese Anmeldeinformationen in die Basis -URI aufzunehmen.
Überblick über das Projekt

Sie werden einen Pokemon Spawn -Standorte -Recorder bauen.

Auf diese Weise können Benutzer die Orte der Monster speichern, denen sie auf Pokemon GO begegnen. Google Maps werden verwendet, um nach Standorten zu suchen, und einen Marker, der platziert ist, um den genauen Standort zu bestimmen. Sobald der Benutzer mit dem Standort zufrieden ist, kann der Marker interagiert werden, wenn er ein modales Feld anzeigt, mit dem der Benutzer den Namen des Pokemon eingeben und den Speicherort speichern kann. Wenn der nächste Benutzer vorbeikommt und denselben Speicherort sucht, werden die von früheren Benutzer hinzugefügten Werte in der Karte als Markierungen aufgetragen. So wird die App aussehen:

So erstellen Sie einen Pokemon Spawn -Standorte -Recorder mit CouchDB

Der vollständige Quellcode für das Projekt ist auf GitHub verfügbar.

Einrichten der Entwicklungsumgebung

Wenn Sie keine gute, isolierte Entwicklungsumgebung eingerichtet haben, wird empfohlen, dass Sie das Gehöfte verbessert verwenden.

Die Box wird nicht mit installiertem CouchDB geliefert, sodass Sie das manuell tun müssen. Aber nicht nur einfach Couchdb. Die App muss mit GEO -Daten (Breiten und Längswerte) arbeiten: Sie liefern CouchDB mit den Begrenzungsbox -Informationen von Google Maps. Das Begrenzungsfeld repräsentiert den Bereich, der derzeit in der Karte angezeigt wird, und alle vorherigen Koordinaten, die Benutzer in diesem Bereich hinzugefügt haben, werden ebenfalls auf der Karte angezeigt. CouchDB kann dies nicht standardmäßig tun, weshalb Sie ein Plugin namens Geocouch installieren müssen, um CouchDB einige räumliche Superkräfte zu geben.

Der einfachste Weg, dies zu tun, ist das Geocouch -Docker -Container. Sie können auch versuchen, Geocouch manuell zu installieren. Sie müssen jedoch CouchDB von Quelle installieren und alles von Hand konfigurieren. Ich empfehle diese Methode nicht wirklich, es sei denn, Sie haben einen Unix -Bart.

Gehen Sie voran und installieren Sie Docker in der von Ihnen verwendeten VM und kommen Sie hierher zurück, sobald Sie fertig sind.

Geocouch

installieren

Klonen Sie zuerst das Repo und navigieren Sie in das erstellte Verzeichnis.

<span>git clone git@github.com:elecnix/docker-geocouch.git
</span><span>cd docker-geocouch
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Öffnen Sie als Nächst

# Get the CouchDB source
RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$
    tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Sie müssen dies tun, weil die derzeit verwendete Download -URL bereits fehlschlägt.

Erstellen Sie das Docker -Bild:

<span>docker build -t elecnix/docker-geocouch:1.6.1 .
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Dies dauert eine Weile von Ihrer Internetverbindung, also schnappen Sie sich einen Snack. Sobald es fertig ist, erstellen Sie den Container und starten Sie ihn:

<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1
</span><span>docker start <container id>
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Sobald es begonnen hat, können Sie prüfen, ob es ausgeführt wird, indem Sie den folgenden Befehl ausführen:

<span>curl localhost:5984
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Außerhalb der VM, wenn Sie die Anschlüsse ordnungsgemäß weitergeleitet haben, ist dies:

<span>curl 192.168.33.10:5984
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Es sollte Folgendes zurückgeben:

<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Beachten Sie, dass ich während des gesamten Artikels ständig auf 192.168.33.10 verweise. Dies ist die IP, die Scotchbox zugeordnet ist, der Vagrant -Box, die ich verwendet habe. Wenn Sie das Gehorsead verbessert verwenden, ist die IP 192.168.10.10. Sie können diese IP verwenden, um auf die App zuzugreifen. Wenn Sie etwas ganz anderes verwenden, passen Sie sich nach Bedarf an.

Einrichten des Projekts

Sie werden das schlanke Framework verwenden, um die Entwicklung der App zu beschleunigen. Erstellen Sie ein neues Projekt mit Composer:

php <span>composer create-project slim/slim-skeleton pokespawn
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
pokespawn ist der Name des Projekts. Navigieren Sie also zu diesem Verzeichnis, sobald der Komponist fertig ist. Installieren Sie dann die folgenden zusätzlichen Pakete:

<span>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Hier finden Sie eine kurze Übersicht über jedes:

  • danrovito/pekephp - für einfach mit der Pokemon -Api.
  • GuzzleHttp/Guzzle - Um Anforderungen an den CouchDB -Server zu stellen.
  • Gregwar/Image - Zur Größe der Pokemon Sprites, die von der Pokemon -API zurückgegeben wurden.
  • vlucas/phpDotenv - zum Speichern von Konfigurationswerten.

Einrichten der Datenbank

Zugriff auf Futon aus dem Browser und erstellen Sie eine neue Datenbank namens Pokespawn. Gehen Sie nach dem Erstellen in die Datenbank und erstellen Sie eine neue Ansicht. Sie können dies tun, indem Sie auf die Dropdown -Ansicht anstellen und die temporäre Ansicht auswählen. Fügen Sie Folgendes in der TextArea für die Kartenfunktion hinzu:

<span>git clone git@github.com:elecnix/docker-geocouch.git
</span><span>cd docker-geocouch
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

So erstellen Sie einen Pokemon Spawn -Standorte -Recorder mit CouchDB

Sobald dies erledigt ist, klicken Sie auf die Schaltfläche Speichern, fügen Sie Pokémon als Name des Designdokuments und By_Name als Ansichtsname hinzu. Drücken Sie auf Speichern, um die Ansicht zu speichern. Später verwenden Sie diese Ansicht, um Pokemon -Namen basierend auf dem vorzuschlagen, was der Benutzer eingegeben hat.

So erstellen Sie einen Pokemon Spawn -Standorte -Recorder mit CouchDB

Erstellen Sie als nächstes ein Designdokument, um auf räumliche Suchanfragen zu reagieren. Sie können dies tun, indem Sie Entwurfsdokumente in der Dropdown -Ansicht auswählen und dann auf ein neues Dokument klicken. Sobald auf der Seite ein Designdokument erstellt wird, klicken Sie auf die Schaltfläche Feld hinzufügen und räumlich als Feldname und den folgenden als Wert hinzufügen:

# Get the CouchDB source
RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$
    tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

In diesem Entwurfsdokument werden die von Geocouch bereitgestellten räumlichen Funktionen verwendet. Das erste, was es tut, ist zu prüfen, ob das Dokument über ein Loc -Feld enthält. Das LOC -Feld ist ein Array, das die Koordinaten eines bestimmten Ortes enthält, wobei der erste Element den Breitengrad und das zweite Element, das die Länge enthält, enthält. Wenn das Dokument diese Kriterien erfüllt, verwendet es die EMIT () -Funktion wie eine normale Ansicht. Der Schlüssel ist eine Geojson -Geometrie und der Wert ist ein Array, das den Namen des Pokemon und des Sprite enthält.

Wenn Sie eine Anfrage an das Designdokument stellen, müssen Sie den Start_Range und das End_Range mit dem Format eines JSON -Arrays angeben. Jeder Artikel kann entweder eine Nummer oder eine Null sein. Null wird verwendet, wenn Sie einen offenen Bereich wünschen. Hier ist eine Beispielanforderung:

<span>docker build -t elecnix/docker-geocouch:1.6.1 .
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

und seine Ausgabe:

<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1
</span><span>docker start <container id>
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn Sie mehr darüber erfahren möchten, welche spezifischen Vorgänge Sie mit Geocouch durchführen können, lesen Sie unbedingt die Dokumentation oder das Wiki.

Erstellen des Projekts

Jetzt können Sie Code schreiben. Zuerst werden Sie sich den Code für das Back-End ansehen und dann mit dem Front-End-Code fortfahren.

poke Importeur

Die App erfordert, dass einige Pokemon -Daten bereits in der Datenbank liegen, bevor sie verwendet werden kann, sodass ein Skript, das nur lokal ausgeführt wird. Erstellen Sie eine Datei poke-Importer.php am Stamm Ihres Projektverzeichnisses und fügen Sie Folgendes hinzu:

<span>git clone git@github.com:elecnix/docker-geocouch.git
</span><span>cd docker-geocouch
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dieses Skript stellt eine Anfrage an den Pokedex -Endpunkt der Pokemon -API. Dieser Endpunkt erfordert die ID der Pokedex -Version, die sie zurückgeben soll. Da Pokemon GO nur den Spielern ermöglicht, Pokemon aus der ersten Generation zu fangen, liefern Sie 2 als ID. Dies gibt das gesamte Pokémon aus der Region Kanto des ursprünglichen Pokemon -Spiels zurück. Schleifen Sie dann die Daten durch, extrahieren Sie alle erforderlichen Informationen, speichern Sie das Sprite und erstellen Sie ein neues Dokument mit den extrahierten Daten.

Routen

Öffnen Sie die Datei src/Routes.php und fügen Sie die folgenden Routen hinzu:

# Get the CouchDB source
RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$
    tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Jede der Routen reagieren auf die Aktionen, die im gesamten App ausgeführt werden können. Die Stammroute gibt die Startseite zurück, die Suchroute gibt die Pokemon-Namensvorschläge zurück, die Save-Location-Route spart den Ort und die Fetch-Route gibt das Pokemon an einem bestimmten Ort zurück.

Home Controller

Erstellen Sie unter dem SRC -Verzeichnis einen App/Controller -Ordner und im Inneren eine Homecontroller.php -Datei. Dadurch werden alle für die einzelnen Routen benötigten Aktionen durchgeführt. Hier ist der Code:

<span>docker build -t elecnix/docker-geocouch:1.6.1 .
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Der Home Controller verwendet den $ renderer, der über den Konstruktor übergeben wird, um die Startseite der App zu rendern. Es verwendet auch die DB -Klasse, die Sie in Kürze erstellen.

mit Couchdb

sprechen

Erstellen Sie eine Utils/db.php -Datei im App -Verzeichnis. Öffnen Sie die Datei und erstellen Sie eine Klasse:

<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1
</span><span>docker start <container id>
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

In der Klasse erstellen Sie einen neuen Client. Sie verwenden Guzzle anstelle einiger PHP -Clients für CouchDB, da Sie alles, was Sie wollen, damit tun können.

<span>curl localhost:5984
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die Konfiguration stammt aus der .Env -Datei am Stamm des Projekts. Dies enthält die Basis -URL von Couchdb.

<span>curl 192.168.33.10:5984
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

SearchPokemon ist für die Rückgabe der von der automatischsten Funktionalität verwendeten Daten verantwortlich. Da CouchDB nicht die gleiche Bedingung unterstützt, die Sie in SQL gewohnt sind, verwenden Sie einen kleinen Hack, um ihn nachzuahmen. Der Trick hier ist die Verwendung von start_key und end_key anstelle von nur taste, die nur genau übereinstimmen. FFF0 ist eines der speziellen Unicode -Zeichen, die am Ende der grundlegenden mehrsprachigen Ebene zugewiesen wurden. Dies macht es zu einem guten Kandidaten, um sich am Ende der durchsuchten Zeichenfolge anzuhängen, wodurch der Rest der Zeichen aufgrund seines hohen Wertes optional wird. Beachten Sie, dass dieser Hack nur für kurze Wörter funktioniert, sodass er mehr als ausreicht, um nach Pokemon -Namen zu suchen.

<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

makeGetRequest wird verwendet, um die Leseanforderungen an CouchDB und makepostrequest für das Schreiben auszuführen.

php <span>composer create-project slim/slim-skeleton pokespawn
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

SavePokemonLocation speichert die Koordinaten, auf die der Google Map -Marker derzeit zusammen mit dem Namen und dem Sprite zeigt. Ein Feld doc_type wird auch hinzugefügt, um alle Dokumente in Bezug

<span>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
isvalidcoordinaten prüft, ob die Werte mit Breitengrad und Längengrad ein gültiges Format haben.

<span>git clone git@github.com:elecnix/docker-geocouch.git
</span><span>cd docker-geocouch
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

fetchpokemons ist die Funktion, die die Anforderung an das Entwurfsdokument für die zuvor erstellte räumliche Suche erstellt. Hier geben Sie die Southwest -Koordinaten als Wert für den Start_Range und die Nordostkoordinaten als Wert für das end_range an. Die Antwort ist auch auf die ersten 100 Zeilen beschränkt, um zu verhindern, dass zu viele Daten angefordert werden. Zuvor haben Sie auch gesehen, dass einige Daten von CouchDB zurückgegeben werden, die nicht wirklich benötigt werden. Es wäre nützlich zu extrahieren und dann nur die für das Frontend erforderlichen Daten zurückzugeben. Ich entschied mich dafür, das als Optimierung für einen weiteren Tag zu verlassen.

# Get the CouchDB source
RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$
    tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

HandleResponse konvertiert die von CouchDB zurückgegebene JSON -Zeichenfolge in ein Array.

<span>docker build -t elecnix/docker-geocouch:1.6.1 .
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

öffnen Sie Composer.json im Stammverzeichnis und fügen Sie die folgenden direkt unter der Forderungseigenschaft hinzu und führen Sie den Komponisten-Dump-Autoload aus. Auf diese Weise können Sie alle Dateien im SRC/App -Verzeichnis automatisch laden und es im App -Namespace zur Verfügung stellen:

<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1
</span><span>docker start <container id>
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Injektieren Sie zum Schluss den Home Controller in den Container. Sie können dies tun, indem Sie die Datei src/abhängig.php öffnen und unten Folgendes hinzufügen:

<span>curl localhost:5984
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Auf diese Weise können Sie den Twig -Renderer an den Heimcontroller weitergeben und homecontroller vom Router zugänglich machen.

Homepage -Vorlage

Jetzt sind Sie bereit, mit dem Front-End fortzufahren. Erstellen Sie zunächst eine Vorlagen/index.html -Datei am Stamm des Projektverzeichnisses und fügen Sie Folgendes hinzu:

<span>curl 192.168.33.10:5984
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

im

sind die Stile aus den verschiedenen Bibliotheken, die die App verwendet, sowie die Stile für die App. In der befinden sich das Textfeld für Suchpositionen, den Kartenbehälter und das Modal zum Speichern eines neuen Standorts. Im Folgenden sind die in der App verwendeten Skripte. Vergessen Sie nicht, Ihre_googlemap_apikey im Google Maps -Skript durch Ihren eigenen API -Schlüssel zu ersetzen.

JavaScript

für die Hauptdatei JavaScript (öffentlich/js/main.js) erstellen Sie zunächst Variablen zum Speichern von Werten, die Sie während der gesamten Datei benötigen.

<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Erstellen Sie als nächstes die Funktion zum Initialisieren der Karte. Ein min_zoomLevel wird angegeben, um zu verhindern, dass Benutzer die gesamte Weltkarte sehen können. Sie haben bereits eine Grenze zu den Ergebnissen hinzugefügt, die von CouchDB zurückgegeben werden können. Dies ist jedoch auch eine gute Ergänzung, um zu verhindern, dass die Benutzer von der ganzen Welt Daten auswählen können.

php <span>composer create-project slim/slim-skeleton pokespawn
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Erstellen Sie den Marker für Pin-Ankündigungsorte, die Benutzer hinzufügen möchten. Fügen Sie dann einen Ereignishörer hinzu, um das Modal zum Hinzufügen von Stellen zu öffnen, wenn der Marker gedrückt wird:

<span>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Initialisieren Sie das Suchfeld:

<span>function(doc){
</span>  <span>if(doc.doc_type == 'pokemon'){
</span>    <span>emit(doc.name, null);
</span>  <span>}
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren

Fügen Sie verschiedene Kartenhörer hinzu:

<span>{
</span>   <span>"points": "function(doc) {\n    if (doc.loc) {\n        emit([{\n            type: \"Point\",\n            coordinates: [doc.loc[0], doc.loc[1]]\n        }], [doc.name, doc.sprite]);\n    }};"
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren

Fügen Sie einen Ereignishörer hinzu, wenn sich der Platz im Suchfeld ändert.

<span>curl -X GET --globoff 'http://192.168.33.10:5984/pokespawn/_design/location/_spatial/points?start_range=[-33.87049924568689,151.2149563379288]&end_range=[33.86709181198735,151.22298150730137]'
</span>
Nach dem Login kopieren

Die Fetchpokemon -Funktion ist für das Abrufen des Pokémon verantwortlich

<span>git clone git@github.com:elecnix/docker-geocouch.git
</span><span>cd docker-geocouch
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dies ist der Code zum Hinzufügen der automatischsten Funktionalität des Textfelds zum Eingeben des Namens eines Pokémon. Eine RenderItem -Funktion wird angegeben, um die HTML anzupassen, die zum Rendern jeder Vorschläge verwendet wird. Auf diese Weise können Sie die ID des Pokemon als Datenattribut hinzufügen, mit dem Sie den Wert des Feldes pokemon_id festlegen, sobald ein Vorschlag ausgewählt ist.

# Get the CouchDB source
RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$
    tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn die Schaltfläche Speicherort gespeichert wird, wird dem Server eine Anforderung gestellt, um den Pokemon -Speicherort zu CouchDB hinzuzufügen.

<span>docker build -t elecnix/docker-geocouch:1.6.1 .
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

styles

Erstellen Sie eine öffentliche/css/styles.css -Datei und fügen Sie die folgenden Stile hinzu:

<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1
</span><span>docker start <container id>
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Sicherung von Couchdb

standardmäßig ist CouchDB für alle geöffnet. Dies bedeutet, dass jeder, sobald Sie es dem Internet ausgesetzt sind, jeder in Ihrer Datenbank Chaos anrichten kann. Jeder kann einen beliebigen Datenbankvorgang durchführen, indem sie einfach Curl, Postbote oder ein anderes Tool verwenden, um HTTP -Anforderungen zu erstellen. Tatsächlich hat dieser vorübergehende Zustand sogar einen Namen: die „Administratorpartei“. Sie haben dies im vorherigen Tutorial in Aktion gesehen und selbst wenn Sie früher eine neue Datenbank, eine Ansicht und ein Designdokument erstellt haben. Alle diese Aktionen können nur vom Serveradministrator ausgeführt werden, aber Sie haben es getan, ohne sich anzumelden oder so. Immer noch nicht überzeugt? Versuchen Sie, dies auf Ihrem lokalen Computer auszuführen:

<span>curl localhost:5984
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Sie erhalten Folgendes als Antwort, wenn Sie noch keinen Server -Administrator auf Ihrer CouchDB -Installation haben:

<span>curl 192.168.33.10:5984
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

yikes, oder? Die gute Nachricht ist, dass es eine einfache Lösung gibt. Sie müssen lediglich einen Serveradministrator erstellen. Sie können dies mit dem folgenden Befehl tun:

<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}}
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Der obige Befehl erstellt einen neuen Server -Administrator mit dem Namen "Kami" mit dem Passwort "MysuperSecurePassword".

standardmäßig hat CouchDB keinen Server -Administrator. Sobald Sie eine erstellt haben, ist die Administratorpartei vorbei. Beachten Sie, dass Server-Administratoren gottähnliche Kräfte haben, sodass Sie wahrscheinlich besser dran sind, nur ein oder zwei zu erstellen. Erstellen Sie dann eine Handvoll Datenbankadministratoren, die nur CRUD -Operationen ausführen können. Sie können dies tun, indem Sie den folgenden Befehl ausführen:

php <span>composer create-project slim/slim-skeleton pokespawn
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn es erfolgreich ist, wird eine Antwort ähnlich wie folgt zurückgegeben:

<span>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Jetzt können Sie denselben Befehl von früher mit einem anderen Datenbanknamen ausprobieren:

<span>function(doc){
</span>  <span>if(doc.doc_type == 'pokemon'){
</span>    <span>emit(doc.name, null);
</span>  <span>}
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren

und CouchDB werden Sie anschreien:

<span>{
</span>   <span>"points": "function(doc) {\n    if (doc.loc) {\n        emit([{\n            type: \"Point\",\n            coordinates: [doc.loc[0], doc.loc[1]]\n        }], [doc.name, doc.sprite]);\n    }};"
</span><span>}
</span>
Nach dem Login kopieren
Nach dem Login kopieren

Damit dies funktioniert, müssen Sie jetzt Ihren Benutzernamen und Ihr Passwort in der URL wie SO angeben:

<span>git clone git@github.com:elecnix/docker-geocouch.git
</span><span>cd docker-geocouch
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

ok, das ist es? Nun, nicht wirklich, weil das einzige, was Sie durchgeführt haben, die Datenbankvorgänge beschränken, die nur von Server -Administratoren durchgeführt werden können. Dies beinhaltet Dinge wie das Erstellen einer neuen Datenbank, das Löschen einer Datenbank, das Verwalten von Benutzern, das Vollverkehrszugriff auf alle Datenbanken (einschließlich Systemtabellen) und CRUD-Vorgänge auf alle Dokumente. Dadurch haben Sie nicht authentifizierte Benutzer, die immer noch die Möglichkeit haben, Crud -Sachen in jeder Datenbank zu machen. Sie können dies ausprobieren, indem Sie sich aus Futon abmelden, jede Datenbank auswählen, mit der Sie sich anlegen möchten, und Roh -Sachen darin machen. CouchDB wird diese Operationen immer noch gerne für Sie ausführen.

Wie können Sie die verbleibenden Löcher patchen? Sie können dies tun, indem Sie ein Designdokument erstellen, das überprüft, ob der Benutzername des Benutzer, der versucht, eine Schreiboperation auszuführen (Einfügen oder Update), dem Namen des Benutzers entspricht, der dies tun darf. Melden Sie sich in Futon mithilfe eines Server -Administrator- oder Datenbankadmin -Kontos an, wählen Sie die Datenbank aus, mit der Sie arbeiten möchten, und erstellen Sie ein neues Designdokument. Stellen Sie die ID als _design/blockanonymouswrites fest, fügen Sie ein Feld namens validate_doc_update hinzu und setzen Sie den Wert auf Folgendes:

# Get the CouchDB source
RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$
    tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die neue Version des Dokuments, das vorhandene Dokument und der Benutzerkontext werden als Argument für diese Funktion übergeben. Das einzige, was Sie überprüfen müssen, ist der UserCtX, der den Namen der Datenbank enthält, der Name des Benutzers, der die Operation durchführt, und ein Array von Rollen, die dem Benutzer zugeordnet sind.

Ein Secobj wird auch als viertes Argument verabschiedet, aber Sie müssen nicht wirklich daran arbeiten. Deshalb wird es weggelassen. Grundsätzlich beschreibt der Secobj, welche Administratorrechte in der Datenbank festgelegt wurden.

Sobald Sie den Wert hinzugefügt haben, speichern Sie das Entwurfsdokument, melden Sie sich an und versuchen Sie, ein neues Dokument zu erstellen oder ein vorhandenes zu aktualisieren und sich mit CouchDB anzuschauen.

So erstellen Sie einen Pokemon Spawn -Standorte -Recorder mit CouchDB

Da Sie nur nach dem Benutzernamen suchen, denken Sie vielleicht, dass Angreifer einfach den Benutzernamen erraten und den Wert für das Passwort liefern können und es funktionieren würde. Nun, nicht wirklich, weil CouchDB zuerst überprüft, ob der Benutzername und das Passwort korrekt sind, bevor das Designdokument überhaupt ausgeführt wird.

Alternativ können Sie, wenn Sie viele Benutzer in einer einzigen Datenbank haben, auch nach der Rolle überprüfen. Die folgende Funktion bringt jedem Benutzer einen Fehler, der nicht die Rolle von "pokemon_master" hat.

<span>docker build -t elecnix/docker-geocouch:1.6.1 .
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Wenn Sie mehr über die Sicherung von CouchDB erfahren möchten, lesen Sie die folgenden Ressourcen:

  • Couchdb die endgültige Anleitung - Sicherheit
  • Die endgültige Anleitung zur CouchDB -Authentifizierung und Sicherheit
  • Sicherheitsfunktionen Übersicht
  • Dokument -Update -Validierung

Sicherung der App

Lassen Sie uns die App aktualisieren, um die Sicherheitsmaßnahmen zu verwenden, die Sie auf die Datenbank angewendet haben. Aktualisieren Sie zuerst die .Env -Datei: Ändern Sie die Base_uri nur mit der IP -Adresse und dem Port und fügen Sie dann den Benutzernamen und das Kennwort des von Ihnen erstellten CouchDB -Benutzers hinzu.

<span>git clone git@github.com:elecnix/docker-geocouch.git
</span><span>cd docker-geocouch
</span>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Aktualisieren Sie dann den Konstruktor der DB -Klasse, um die neuen Details zu verwenden:

# Get the CouchDB source
RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$
    tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Schlussfolgerung

Das ist es! In diesem Tutorial haben Sie gelernt, wie man eine Pokemon Spawn -Orte -Rekorder -App mit CouchDB erstellt. Mit Hilfe des Geocouch -Plugins konnten Sie räumliche Abfragen durchführen und Sie haben gelernt, wie Sie Ihre CouchDB -Datenbank sichern können.

Verwenden Sie CouchDB in Ihren Projekten? Wozu? Irgendwelche Vorschläge / Funktionen, die zu diesem kleinen Projekt von uns aufgenommen werden sollen? Lassen Sie uns in den Kommentaren wissen!

häufig gestellte Fragen zu Pokemon Spawn -Standorten

Wie kann ich Pokemon Spawn -Standorte in Pokemon GO finden? Diese Bereiche können Parks, Einkaufszentren und andere öffentliche Orte umfassen. Die Pokemon Go App verwendet GPS, um Ihren Standort zu verfolgen und Pokemon basierend auf Ihrer Umgebung zu erzeugen. Sie können auch Apps oder Websites von Drittanbietern wie pokemap.net verwenden, um Spawn-Standorte zu finden. Beachten Sie jedoch, dass die Verwendung von Diensten von Drittanbietern gegen die Nutzungsbedingungen von Pokemon GO verstoßen kann und zu einem Verbot führen kann.

Ein Biom in Pokemon Go ist ein spezifischer geografischer Bereich, der die Arten von Pokemon dort beeinflusst. Zum Beispiel sind Wassertyp-Pokémon mit größerer Wahrscheinlichkeit in der Nähe von Wasserkörpern, während Pokémon im Graspokemon eher in Parks oder Wäldern laichen. Das Verständnis der verschiedenen Biomes kann Ihnen helfen, vorherzusagen, wo bestimmte Arten von Pokémon wahrscheinlich laichen. Eine Methode besteht darin, eine Datenbank wie CouchDB zu verwenden, um die Standorte von Pokemon Spawns zu speichern. Dies beinhaltet die Verwendung der Pokemon Go -API, um Spawn -Daten abzurufen und diese Daten dann in CouchDB zu speichern. Sie können diese Daten dann verwenden, um Spawn -Muster zu analysieren und zukünftige Spawn -Standorte vorherzusagen. Vorhersage zukünftige Spawns. Durch die Analyse der Daten können Sie Muster an den Spawn -Standorten und -zeiten identifizieren. Dies kann Ihnen helfen, vorherzusagen, wo und wann bestimmte Arten von Pokémon wahrscheinlich in Zukunft laichen.

Gibt es Risiken, die mit der Verwendung von Apps oder Websites von Drittanbietern verbunden sind, um Pokemon-Spawn-Standorte zu finden? Diese Dienste können gegen die Nutzungsbedingungen von Pokemon GO verstoßen und zu einem Verbot führen. Darüber hinaus bieten diese Dienste möglicherweise nicht immer genaue oder aktuelle Informationen. Pokemon Spawn -Standorte im Spiel. Der Mod enthält eine Funktion, die die Spawn -Standorte von Pokemon auf einer Karte anzeigt. Sie können diese Funktion verwenden, um Pokemon im Spiel zu finden und zu fangen. Das bietet eine Karte der Pokemon Spawn -Standorte. Die Karte wird in Echtzeit aktualisiert und enthält Informationen zu den Arten von Pokemon, die laichen und deren genaue Standorte. Beachten Sie jedoch, dass die Verwendung dieses Dienstes gegen die Nutzungsbedingungen von Pokemon GO verstoßen und zu einem Verbot führen kann. Die Pogomap -Website bietet eine Karte der Pokemon Spawn -Standorte. Die Karte wird in Echtzeit aktualisiert und enthält Informationen zu den Arten von Pokemon, die laichen und deren genaue Standorte. Sie können diese Website verwenden, um Pokemon in Ihrer Region zu finden und zu fangen.

Kann ich zur Pogomap -Website beitragen? Dies hilft, die Karte auf dem Laufenden und genau zu halten. Beachten Sie jedoch, dass die Meldung falscher Informationen zu einem Verbot der Website führen kann. Standorte. Zum Beispiel können Sie sich lokalen Pokemon Go -Communities oder Foren anschließen, in denen Spieler Informationen über Spawn -Standorte austauschen. Sie können auch die Feature in Spiel in der Nähe verwenden, um Pokemon zu finden, die in der Nähe Ihres aktuellen Standorts liegen.

Das obige ist der detaillierte Inhalt vonSo erstellen Sie einen Pokemon Spawn -Standorte -Recorder mit CouchDB. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage