Laravel 5.0 пытается сохранить файл и сохранить путь к файлу в БД

Я пытаюсь сохранить изображение и сохранить его местоположение в базе данных, но по какой-то причине я всегда получаю null, когда сбрасываю запрос с моего контроллера. Не уверен, что я делаю неправильно.

Моя форма:

<form class = "addorUpdateBlockItem" method = "post" enctype = "multipart/form-data">
    <div class = "input-group item">
        <label for = "content">label</label>
        <input type = "text" hidden name = "item_type" value = "image">
        <input type = "file" name = "content" id = "contentImageBlockId3" class = "form-control">
        <span class = "input-group-btn">
            <button type = "submit" class = "btn btn-default plus margin-top">opslaan</button>
        </span>
    </div>
</form>

Теперь в моем контроллере я пытаюсь получить доступ к изображению в своем запросе следующим образом:

dd($request->input('content'));

Это приводит к нулю

Мой метод контроллера, где я делаю дамп

/**
 * Add or Update a BlockItemContent to a BlockNewsletter item.
 *
 * @param $blockNewsletterPivotId
 * @param Request $request
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function addOrUpdateBlockItemContent($blockNewsletterPivotId, Request $request)
{
    if ($request->input('item_type') == "image") {
        dd($request->hasFile('content'));
    }
}

это приводит к ложному

РЕДАКТИРОВАТЬ

Я забыл, что все происходит через вызов ajax, возможно, это как-то связано с этим:

$(document).on('submit', '.addorUpdateBlockItem', function (e) {
        e.preventDefault();

        // Retrieve form data
        let formData = new FormData();

        let data = $(this).serializeArray();
        $.each(data, function(index, field) {
            formData.set(field.name, field.value);
        });

        $.ajax({
            url: $(this).attr('action'),
            data: formData,
            processData: false,
            contentType: false,
            type: 'POST',
            success: function(data){
                if (data.data.actionType === 'update') {
                    $('.successMessage').html(data.data.item + ' succesvol bijgewerkt.');
                }

                if (data.data.actionType === 'insert') {
                    $('.successMessage').html(data.data.item + ' succesvol toegevoegd.');
                }

                $('.successMessage').show();
            },
            error: function(error) {
                console.info(error);
            }
        });
    });

удалите if ($request->input('item_type') == "image") и посмотрите, возвращает ли dd значение true. Если да, то файл есть

porloscerros Ψ 21.05.2019 10:25

он также возвращает ложь

Michael 21.05.2019 10:26
Стоит ли изучать 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
2
134
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете получить доступ к файлу с помощью $request->file('content').

Проверьте также $request->hasFile('content'), он должен вернуть вам true.

к сожалению, он возвращает false, что происходит не так?

Michael 21.05.2019 09:57

есть ли у $_FILES данные вашего загруженного файла? Можете ли вы показать мне подпись вашего метода контроллера?

Leonardo Rossi 21.05.2019 10:01

вы можете увидеть мой отредактированный OP, я забыл, что все происходит с вызовом ajax

Michael 21.05.2019 10:30
Ответ принят как подходящий

Замените раздел formdata здесь:

let formData = new FormData();

let data = $(this).serializeArray();
$.each(data, function(index, field) {
    formData.set(field.name, field.value);
});

С этим:

let formData = new FormData($(this)[0]);

но мне нужно использовать этот код formData, потому что это может быть просто поле ввода, а не изображение.

Michael 21.05.2019 11:25

Насколько я знаю, этот код должен захватить их все?

Kyle Wardle 21.05.2019 11:32

вы правы, это работает с изображением и вводом текста, спасибо

Michael 21.05.2019 11:38

вы сделали эту строку:

$.ajax({
        url: $(this).attr('action'),..

но в вашей форме вы не указали никакого действия:

<form class = "addorUpdateBlockItem" method = "post" enctype = "multipart/form-data">

поэтому попробуйте сделать это и позвольте мне увидеть ваш результат dd:

<form class = "addorUpdateBlockItem" action = "{{ route('your_upload_route') }}" method = "post" enctype = "multipart/form-data">

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