Я создаю уведомление с помощью Pusher и получаю «маршрут» на какую-то страницу в виде переменной JavaScript.
Теперь я хочу ввести эту переменную в панель уведомлений как ссылку на некоторую страницу, определенную в переменной, Я пытаюсь сделать href и поместить в него маршрут, используя метод URL-адреса laravel, чтобы получить к нему доступ с любой страницы. вот код
channel.bind('App\\Events\\Councilcreated', function (data) {
var a = document.createElement('a');
a.setAttribute("href", "{{ url(".data.page.") }}");
});
Проблема в том, что печатается (data.page) как строка, а не как значение переменной (data.page)
`общественное имя_совета; публичный $id; публичный $титул; публичный $d; публичное $сообщение; публичная $страница; общедоступная иконка $; публичная функция __construct($councilname,$id,$title,$message,$page,$icon) {$d=0; $this->название_совета = $имя_совета; $это->идентификатор = $идентификатор; $это->заголовок = $заголовок; $это->сообщение = $сообщение; $эта->страница = $страница; $this->icon = $icon; }`
он успешно напечатан в консоли



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я предлагаю вам сначала сохранить свой URL-адрес в переменной javascript, затем добавить в него свои данные, а затем установить его для вас href. что-то вроде ниже.
var url = "{{ url() }}";
a.setAttribute("href", url+'/'+data.page);
Если вы получаете ошибку htmlspecialchars(), как вы сказали, а затем используйте ее, как показано ниже
var url = "{!! url() !!}";
a.setAttribute("href", url+'/'+data.page);
Почему вы не передаете полный URL-адрес со стороны php и напрямую используете его здесь, как показано ниже.
//php
$this->page = url($page);
//javascipt
a.setAttribute("href", data.page);
первое предложение возвращает исключение laravel htmlspecialchars() ожидает, что параметр 1 будет строкой, объект задан
Я сохраняю страницу в таблице уведомлений. Правильно ли сохранить весь URL-адрес?
не сохраняйте его в таблице, просто верните весь URL-адрес вашего мероприятия, как я предлагаю $this->page = url($page);
Это не сработает, поскольку вы смешиваете javascript с php, т. е. когда эта функция выполняется, у вас не будет доступа к функции url, поскольку она будет выполняться в браузере.
Я бы предложил сделать page полностью определенный URL-адрес в вашем классе событий, т.е. использовать там функцию url():
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;
}
Затем в вашем прослушивателе событий JS вам просто нужно:
channel.bind('App\\Events\\Councilcreated', function (data) {
var a = document.createElement('a');
a.setAttribute("href", data.page);
});
Я сохраняю страницу в таблице уведомлений в БД. Правильно ли сохранить весь URL-адрес?
@SamehMohamedOmar Да, нет ничего плохого в сохранении всего URL-адреса для уведомлений.
В нижнем колонтитуле объявите такую переменную
const url = "{{ url() }}";
Если возвращается какой-либо специальный символ, используйте это:
const url = "{!! url() !!}";
а затем продолжайте использовать эту переменную во всех необходимых местах, например:
a.setAttribute("href", url+'/'+data.page);
вернуть исключение laravel htmlspecialchars() ожидает, что параметр 1 будет строкой, объект задан
Должен быть какой-то специальный символ, который возвращает ваш метод url(). Я обновил ответ.
Пожалуйста, не могли бы вы показать, где вы устанавливаете
pageв своем классе событий?