Je construis une notification à l'aide de Pusher, et je reçois 'route' vers une page en tant que variable JavaScript
Maintenant, je veux injecter cette variable dans la barre de notification comme lien vers une page déterminée dans la variable J'essaye de faire href et de mettre la route dedans en utilisant la méthode d'url de laravel pour y accéder à partir de n'importe quelle page. voici le code
channel.bind('App\\Events\\Councilcreated', function (data) {
var a = document.createElement('a');
a.setAttribute("href", "{{ url(".data.page.") }}");
});
le problème est qu'il est imprimé (data.page) comme une chaîne et non comme la valeur de la variable (data.page)
3 Réponses :
Je vous suggère de stocker d'abord votre URL dans une variable javascript, puis d'y ajouter vos données, puis de la définir sur vous href. quelque chose comme ci-dessous.
//php
$this->page = url($page);
//javascipt
a.setAttribute("href", data.page);
Si vous obtenez une erreur htmlspecialchars () comme vous l'avez dit, puis utilisez-la comme ci-dessous
var url = "{!! url() !!}";
a.setAttribute("href", url+'/'+data.page);
Pourquoi vous ne passez pas URL complète du côté php et utilisez-la directement ici, quelque chose comme ci-dessous.
var url = "{{ url() }}";
a.setAttribute("href", url+'/'+data.page);
la première suggestion renvoie l'exception laravel htmlspecialchars () s'attend à ce que le paramètre 1 soit une chaîne, objet donné
J'enregistre la page dans la table de notification, est-ce correct de sauvegarder l'URL entière?
ne l'enregistrez pas dans le tableau, donnez simplement le retour de l'url entière de votre événement comme je suggère $ this-> page = url ($ page);
Cela ne fonctionnera pas car vous mélangez javascript avec php, c'est-à-dire que lorsque cette fonction s'exécute, vous n'aurez pas accès à la fonction url car elle sera exécutée dans le navigateur.
Je suggérerais de faire de page une URL complète dans votre classe d'événement, c'est-à-dire en utilisant la fonction url () là-dedans:
channel.bind('App\\Events\\Councilcreated', function (data) {
var a = document.createElement('a');
a.setAttribute("href", data.page);
});
Ensuite, dans votre écouteur d'événements JS, vous auriez juste besoin de:
public function __construct($councilname, $id, $title, $message, $page, $icon)
{
$d = 0;
$this->councilname = $councilname;
$this->id = $id;
$this->title = $title;
$this->message = $message;
$this->page = url($page); // <-- This line
$this->icon = $icon;
}
J'enregistre la page dans la table de notification dans DB, est-ce correct de sauvegarder l'URL entière?
@SamehMohamedOmar Oui, il n'y a rien de mal à enregistrer l'URL entière pour les notifications.
Dans votre pied de page, déclarez une variable comme celle-ci
const url = "{{url ()}}";
Si un caractère spécial est renvoyé, utilisez ceci:
const url = "{!! url () !!}";
puis continuez à utiliser cette variable à tous les endroits requis comme celui-ci:
a.setAttribute ("href", url + '/' + data.page);
return exception laravel htmlspecialchars () s'attend à ce que le paramètre 1 soit une chaîne, objet donné
Doit être un caractère spécial que votre méthode url () renvoie. J'ai mis à jour la réponse.
Pouvez-vous indiquer où vous définissez la
pagedans votre classe d'événement?`public $ Councilname; public $ id; public $ title; public $ d; public $ message; public $ page; public $ icon; public function __construct ($ nom du conseil, $ id, $ titre, $ message, $ page, $ icône) {$ d = 0; $ this-> nom du conseil = $ nom du conseil; $ this-> id = $ id; $ this-> title = $ titre; $ this-> message = $ message; $ this-> page = $ page; $ this-> icon = $ icône; } `
il s'est imprimé avec succès dans la console