Laravel 5.0 пытается сохранить файл и сохранить путь к файлу в БД - PullRequest
0 голосов
/ 21 мая 2019

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

Моя форма:

<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.log(error);
            }
        });
    });

Ответы [ 3 ]

1 голос
/ 21 мая 2019

Замените свой раздел формданных здесь:

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]);
0 голосов
/ 21 мая 2019

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

$.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">
0 голосов
/ 21 мая 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...