1
votes

Comment imprimer dynamiquement une variable JavaScript dans Laravel Blade

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 commentaires

Pouvez-vous indiquer où vous définissez la page dans 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


3 Réponses :


3
votes

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);


3 commentaires

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);



0
votes

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;
}


2 commentaires

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.



0
votes

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);


2 commentaires

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.