Использование атрибутов twig, таких как актив, не работающий в jQuery со значениями-заполнителями

Я пытаюсь изменить картину, когда отправляю ajax в случае успеха, изменяя src тега img. Однако я получаю эту ошибку:

GET http://localhost:8000/%7B%7B%20asset('/uploads/images/$%7Bdata.picSource%7D')%7D%7D 404 (Not Found)

Я также получаю ошибки при создании новых кнопок с помощью jQuery, который имеет ветку path в своих атрибутах href. Я читал статьи о том, как поместить часть веточки в такие кавычки: "", но я использую эти: "и внутри них" ", чтобы свободно помещать переменные в path, чтобы сделать его динамическим. Это мой запрос ajax:

$(".uploadPic").on('submit', function(event){
    event.preventDefault();
    event.stopPropagation();
    $.ajax({
        type: "post",
        url: "/upload",
        data: new FormData($(".uploadPic")[0]),
        processData: false,
        contentType: false,
        success: function (data) {
            let newSource = `"{{ asset('/uploads/images/${data.picSource}')}}"`;
            $("#userPic").attr('src', newSource);
        },
        error: function (response) {
            console.info(response);
        }
    });
});

Ответ на вкладке сети нормальный (имя и расширение изображения): {"picSource": "8bcfb2d2a1117cbb452f632829a5cad8.jpeg"}, но я получаю ошибку при передаче нового атрибута. Часть от контроллера при успешном запросе ajax:

if (isset($request->request)) {

        $file = $request->files->get('user_pic_type')['userPic'];
        $file = $user->getUserPic();
        $fileName = $this->generateUniqueFileName() . '.' . $file->guessExtension();


        $file->move(
            $this->getParameter('users_directory'),
            $fileName
        );

        $user->setUserPic($fileName);


        $em = $this->getDoctrine()->getManager();
        $em->persist($user);
        $em->flush();


        return new JsonResponse(array('picSource' => $fileName));

    } 

Что я могу сделать, чтобы исправить эту проблему?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
128
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы перепутали JS (который работает в вашем браузере) и PHP (который работает на вашем сервере и передает обработанный HTML в браузер). Если вы хотите сгенерировать такое правило ресурса во внешнем интерфейсе, вы должны либо запустить для него вызов AJAX, либо сгенерировать URL вручную.

Но поскольку вы уже используете вызов AJAX, вы должны использовать его для возврата пути к изображению. Добавьте такой код в свой PHP-контроллер:

 /** @var \Symfony\Component\Asset\Packages $manager */
$manager = $this->get('assets.packages');
$imagePath = $manager->getUrl('/uploads/images/' . $fileName);

return new JsonResponse(array('picSource' => $fileName, 'imagePath' => $imagePath));

Теперь серверная часть уже генерирует для вас все необходимые данные и отправляет их в браузер.

Другие вопросы по теме