Laravel 4 jquery не возвращает значения файла в контроллер после «частичной проверки»

0

Это мой код jQuery:

$.post('../myprofile/storeitem',
{
name:           $("#name").val(), 
price:          $("#price").val(),
description:    $("#description").val(),
city:           $("#city").val(),
telephone:      $("#telephone").val(),
address:        $("#address").val(),
picture:        $("#picture").val()
},

В моем контроллере у меня есть:

$validation = Validator::make(Input::all(), Product::$rules);

 if($validation->fails()) {
     return Response::json(['success' => false, 'error' => $validation->errors()->toArray()]);  
 }
 else { 
     $image = Input::file('picture');
     $filename = $image->getClientOriginalName();

Мое правило для проверки поля изображения, которое находится в модели продуктов среди других правил:

'picture' => 'required|image|mimes:jpg,jpeg,bmp,png|max:2000'

После частичной успешной проверки я получаю сообщение об ошибке:

{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Call to a member function getClientOriginalExtension() on a non-object","file":"C:\\wamp\\www\\pro\\app\\controllers\\MyprofileController.php","line":125}}
  • 0
    Если это ваш настоящий код, вы пропускаете закрывающее } после вашего else ...
  • 0
    Нет человека, но есть закрывающий тег на моем фактическом коде
Теги:
validation
laravel-4

1 ответ

0

Насколько я понимаю, вы пытаетесь отправить BLOB через AJAX. Если я прав, этот аккуратный, красивый код с $.post намного превосходит реальность.

Прежде всего, вы должны понимать, что чтение файлов - это не простое решение.

В HTML5 вы можете использовать определенные объекты для чтения содержимого файла и отправки его по AJAX. Более подробно вы можете обратиться к следующему вопросу.

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

Наконец, есть браузеры, которые не поддерживают как HTML5, так и flash (более старые мобильные устройства), вы должны настраивать их отдельно. Вы можете использовать метод IFrame, но для этого требуется некоторое твердое кодирование. SO вопрос jQuery iframe загрузки файлов может дать вам некоторые основные начала.

Что касается вашего текущего состояния дел, вы получаете и отправляете строковое значение, а не фактическое значение файла. Здесь обсуждается немного: не удается получить значение типа ввода = "файл"?

Ошибка возникает, потому что $image = Input::file('picture'); возвращает нечто иное, чем ожидаемый объект изображения. И у него нет метода getClientOriginalExtension

Ещё вопросы

Сообщество Overcoder
Наверх
Меню