In MVC-Umgebung bei JS-Validierung auf Datenbank zugreifen
bearbeitet von
Hallo Rolf,
vielen Dank für die ausführliche Erklärung!
> Lies Dir mal [das hier](https://wiki.selfhtml.org/wiki/JavaScript/Objekte/Promise#Einf.C3.BChrung) durch.
Habe ich getan, sehr erhellend, danke!
> Du kommst an den Wert also nur heran, wenn Du Dich der Promise-Logik unterwirfst. Du bekommst von checkUser das Promise 3 zurück. Aber in dem Moment, wo es zurückkommt, hat es noch keinen Wert. Du musst Dich also selbst an das Versprechen ranhängen. Mit .then():
>
> ~~~js
> checkUser("borisbaer")
> .then(function(username) {
> // Ist einer gekommen, dann Kollision melden
> });
Ich hab’s, denke ich, verstanden und hingekriegt! [Hier](https://dev.to/ramonak/javascript-how-to-access-the-return-value-of-a-promise-object-1bck) wird das auch ganz gut erklärt.
Danke auch für die Erklärungen zu async/await. Um es wirklich zu verstehen, muss ich aber mal bei Gelegenheit mehr zu dem Thema recherchieren.
Übrigens habe ich die verify-Methode so umgeschrieben, dass sie sowohl für den Benutzernamen als auch für die E-Mail-Adresse funktioniert …
~~~ PHP
public function verify(): never
{
$attr = array_keys( $_GET )[1] ?? null;
if ( $attr === 'username' || $attr === 'email' ) {
$value = \App\Models\User\SignUp::read( [ $attr => $_GET[$attr] ] );
header( 'Content-Type: application/json' );
echo json_encode( [ 'value' => $value ] );
exit;
} else {
header( 'Location: user' );
exit;
}
}
~~~
Die Javascript-Funktion sieht dann entsprechend so aus:
~~~ JavaScript
async function verify( input, value ) {
try {
const response = await fetch( `/verify?${input.name}=${encodeURIComponent( value )}` );
if ( !response.ok )
throw `${response.status} ${response.statusText}`;
const json = await response.json();
return json.value;
} catch ( error ) {
console.log( error );
return null;
}
}
~~~
Das mit `header( 'Content-Type: application/json' )` und `echo json_encode()` habe ich von einem Tutorial. Es funktioniert aber auch ohne. Gebe ich das also nur für den Browser an?
Grüße
Boris
In MVC-Umgebung bei JS-Validierung auf Datenbank zugreifen
bearbeitet von
Hallo Rolf,
vielen Dank für die ausführliche Erklärung!
> Lies Dir mal [das hier](https://wiki.selfhtml.org/wiki/JavaScript/Objekte/Promise#Einf.C3.BChrung) durch.
Habe ich getan, sehr erhellend, danke!
> Du kommst an den Wert also nur heran, wenn Du Dich der Promise-Logik unterwirfst. Du bekommst von checkUser das Promise 3 zurück. Aber in dem Moment, wo es zurückkommt, hat es noch keinen Wert. Du musst Dich also selbst an das Versprechen ranhängen. Mit .then():
>
> ~~~js
> checkUser("borisbaer")
> .then(function(username) {
> // Ist einer gekommen, dann Kollision melden
> });
Ich hab’s, denke ich, verstanden und hingekriegt! [Hier](https://dev.to/ramonak/javascript-how-to-access-the-return-value-of-a-promise-object-1bck) wird das auch ganz gut erklärt.
Danke auch für die Erklärungen zu async/await. Um es wirklich zu verstehen, muss ich aber mal bei Gelegenheit mehr zu dem Thema recherchieren.
Übrigens habe ich die verify-Methode so umgeschrieben, dass sie sowohl für den Benutzernamen als auch für die E-Mail-Adresse funktioniert …
~~~ PHP
public function verify(): never
{
$attr = array_keys( $_GET )[1] ?? null;
if ( $attr === 'username' || $attr === 'email' ) {
$value = \App\Models\User\SignUp::read( [ $attr => $_GET[$attr] ] );
header( 'Content-Type: application/json' );
echo json_encode( [ 'value' => $value ] );
exit;
} else {
header( 'Location: user' );
exit;
}
}
~~~
Grüße
Boris
In MVC-Umgebung bei JS-Validierung auf Datenbank zugreifen
bearbeitet von
Hallo Rolf,
vielen Dank für die ausführliche Erklärung!
> Lies Dir mal [das hier](https://wiki.selfhtml.org/wiki/JavaScript/Objekte/Promise#Einf.C3.BChrung) durch.
Habe ich getan, sehr erhellend, danke!
> Du kommst an den Wert also nur heran, wenn Du Dich der Promise-Logik unterwirfst. Du bekommst von checkUser das Promise 3 zurück. Aber in dem Moment, wo es zurückkommt, hat es noch keinen Wert. Du musst Dich also selbst an das Versprechen ranhängen. Mit .then():
>
> ~~~js
> checkUser("borisbaer")
> .then(function(username) {
> // Ist einer gekommen, dann Kollision melden
> });
Ich hab’s, denke ich, verstanden und hingekriegt! [Hier](https://dev.to/ramonak/javascript-how-to-access-the-return-value-of-a-promise-object-1bck) wird das auch ganz gut erklärt.
Danke auch für die Erklärungen zu async/await. Um es wirklich zu verstehen, muss ich aber mal bei Gelegenheit mehr zu dem Thema recherchieren.
Grüße
Boris