Abfrageparameter in Yesod suchen

8

Ich habe gerade ein Jessod-Projekt (keine Datenbank) mit yesod init initialisiert.

Mein HomeR GET-Handler sieht folgendermaßen aus:

%Vor%

Wenn yesod devel verwendet wird, kann ich auf die Standard-Homepage unter http://localhost:3000/ zugreifen.

Wie kann ich den oben genannten Handler ändern, um einen HTTP GET-Abfrageparameter wie id=abc123 beim Zugriff auf diese URL abzurufen (und anzuzeigen):

http://localhost:3000/?id=abc123

Hinweis: Diese Frage wurde im Q & A-Stil beantwortet und zeigt daher absichtlich keine Forschungsanstrengungen!

    
Uli Köhler 11.08.2014, 21:57
quelle

1 Antwort

13

Ich werde zwei verschiedene Methoden zeigen, um dies zu erreichen. Für beide müssen Sie diesen Code zu Ihrer Vorlage hinzufügen, z. in homepage.hamlet :

Beachten Sie, dass beim Zugriff auf die URL nicht garantiert ist, dass ein id -Parameter vorhanden ist. Daher ist der Typ, der sich aus beiden Methoden ergibt, Maybe Text . Eine detaillierte Beschreibung der Template-Parameter finden Sie in Shakespeare-Vorlagen .

Methode 1: lookupGetParam

Das geht am einfachsten mit lookupGetParam so:

%Vor%

Bei Verwendung der Standardeinstellung von yesod init muss idValueMaybe sowohl in getHomeR als auch in postHomeR definiert werden, wenn idValueMaybe in der Vorlage verwendet wird.

Ihr HomeR GET-Handler könnte wie folgt aussehen:

%Vor%

Methode 2: reqGetParams

Anstatt die Abfrageparameter nach Namen zu suchen, können Sie auch eine Liste von Abfrageschlüssel / -wertpaaren mithilfe von reqGetParams abrufen. Dies kann in bestimmten Situationen, z.B. wenn Sie nicht alle möglichen Schlüssel im Voraus wissen. Mit der standardmäßigen Funktion lookup können Sie leicht einen bestimmten Schlüssel darin suchen Liste.

Der relevante Teil Ihres Codes könnte wie folgt aussehen:

%Vor%

Ihr getHomeR könnte so aussehen:

%Vor%     
Uli Köhler 11.08.2014, 21:57
quelle

Tags und Links