Laravel не может сохранить фото

У меня есть код функции ниже, но он не сохраняет фотографию ни в базе данных, ни в пути к файлу.

Код

public function store(Request $request)
    {
        $this->validate($request, array(
            'name' => 'required',
            'price' => 'required|numeric',
            'type_id' => 'required|numeric',
            'photo' => 'required',
        ));
        $item = new Menu;
        $item->name = $request->input('name');
        $item->price = $request->input('price');
        $item->type_id = $request->input('type_id');
        if ($request->hasFile('photo')) {
          $photo = $request->file('photo');
          $filename = 'MenuItem' . '-' . time() . '.' . $photo->getClientOriginalExtension();
          $location = public_path('images/'. $filename);
          Image::make($photo)->resize(500, 500)->save($location);
          $item->photo = $filename;
        }
        $item->save();
        Session::flash('success', 'Menu Item Saved Successfully.');
        return redirect()->back();
}

dd($request->all()); кода выше

array:5 [▼
  "_token" => "awAvc7F8lOv9vKkfwyiTFj7jnQGszv8xjLQxcwRH"
  "name" => "test"
  "price" => "100"
  "photo" => "air putih.jpg"
  "type_id" => "1"
]

Любая идея?

Обновлять

Основываясь на ответе Nabil Farhan ниже, я забыл о enctype = "multipart/form-data", но теперь я получаю

Intervention \ Image \ Exception \ NotReadableException
Unable to find file ().

До сих пор не могу сохранить свою фотографию.

Обновление 2

Снова добавляю свои запросы, теперь после добавления enctype = "multipart/form-data" становится странно:

array:5 [▼
  "_token" => "awAvc7F8lOv9vKkfwyiTFj7jnQGszv8xjLQxcwRH"
  "name" => "kerupuk"
  "price" => "2000"
  "type_id" => "3"
  "photo" => UploadedFile {#805 ▼
    -test: false
    -originalName: "kerupuk.jpg"
    -mimeType: "image/jpeg"
    -error: 0
    #hashName: null
    path: "C:\Windows\Temp"
    filename: "phpB195.tmp"
    basename: "phpB195.tmp"
    pathname: "C:\Windows\Temp\phpB195.tmp"
    extension: "tmp"
    realPath: false
    aTime: 2019-02-12 04:57:39
    mTime: 2019-02-12 04:57:39
    cTime: 2019-02-12 04:57:39
    inode: 0
    size: 43933
    perms: 0100666
    owner: 0
    group: 0
    type: "file"
    writable: true
    readable: true
    executable: false
    file: true
    dir: false
    link: false
    linkTarget: "C:\Windows\Temp\phpB195.tmp"
  }
]

Почему мое фотополе становится таким?!

в любом случае, вот моя форма в лезвии:

{{ Form::open(array('route' => 'menus.store', 'files' => true)) }}
  <div class = "row">
    <div class = "col-md-12">
      <h5>Name</h5>
      {{ Form::text('name', null, array('class' => 'form-control')) }}
    </div>
    <div class = "col-md-12">
      <h5>Price</h5>
      {{ Form::number('price', null, array('class' => 'form-control')) }}
    </div>
    <div class = "col-md-12">
      <h5>Photo</h5>
      {{ Form::file('photo', array('class' => 'form-control', 'id' => 'photo')) }}
    </div>
    <div class = "col-md-12">
        <h5>Type</h5>
        <select name = "type_id" id = "type_id" class = "form-control">
            <option value = "">-- Select --</option>
            @foreach($types as $type)
            <option value = "{{$type->id}}">{{$type->name}}</option>
            @endforeach
        </select>
    </div>
    <div class = "col-md-12 mt-2">
      {{ Form::submit('Save', array('class' => 'btn btn-primary')) }}
    </div>
  </div>
{{ Form::close() }}

Можете ли вы обновить код формы здесь.

Md.Sukel Ali 12.02.2019 05:41

@Md.SukelAli обновлено

mafortis 12.02.2019 05:43

@mafortis ваш реальный путь неверен, какая-то ошибка в конфигурации

Shibon 12.02.2019 06:32

обратитесь к этим двум ссылкам stackoverflow.com/questions/41900565/…stackoverflow.com/questions/12531408/…

Shibon 12.02.2019 06:34
Стоит ли изучать 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
4
445
3

Ответы 3

"photo" => "air putih.jpg" не должен быть строкой. Он должен иметь дополнительную информацию о файле.

Я думаю, что проблема в вашем файле блейда. Пожалуйста, проверьте, использовали ли вы enctype='multipart/form-data' в теге формы.

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

Изменить это

Image::make($photo)->resize(500, 500)->save($location);

К этому

Image::make($photo->getRealPath())->resize(500, 500)->save($location);

круто, я совсем забыл об этом :) . теперь я получаю Unable to find file ().

mafortis 12.02.2019 05:35

Пожалуйста, попробуйте сейчас.

Nabil Farhan 12.02.2019 05:43

Попробуйте изменить эту строку

Image::make($photo)->resize(500, 500)->save($location);


Image::make($photo->getRealPath())->resize('200','200')->save($location);

Ваш реальный путь является ложной проверкой конфигурации

как я прокомментировал в набил ответ, который возвращает Image source not readable

mafortis 12.02.2019 06:06

Ваша версия ларавеля??

Shibon 12.02.2019 06:10

можешь сбросить $location

Shibon 12.02.2019 06:13
"C:\laragon\www\hrdapp/public\images/MenuItem-1549948461.jpg‌​"
mafortis 12.02.2019 06:14

какой у вас тип диска 'imagick' или 'gd' также проверьте разрешение на общедоступную папку

Shibon 12.02.2019 06:22

imagick выдает ошибку, которая требует некоторых расширений, поэтому я использую gd по умолчанию

mafortis 12.02.2019 06:25

Вы должны попробовать это:

Ваш файл просмотра, как это:

{!! Form::open(['route' => 'menus.store', 'class' => 'form-horizontal', 'role' => 'form', 'method' => 'post','files'=>true]) !!}
  <div class = "row">
    <div class = "col-md-12">
      <h5>Name</h5>
      {{ Form::text('name', null, array('class' => 'form-control')) }}
    </div>
    <div class = "col-md-12">
      <h5>Price</h5>
      {{ Form::number('price', null, array('class' => 'form-control')) }}
    </div>
    <div class = "col-md-12">
      <h5>Photo</h5>
      {{ Form::file('photo', array('class' => 'form-control', 'id' => 'photo')) }}
    </div>
    <div class = "col-md-12">
        <h5>Type</h5>
        <select name = "type_id" id = "type_id" class = "form-control">
            <option value = "">-- Select --</option>
            @foreach($types as $type)
            <option value = "{{$type->id}}">{{$type->name}}</option>
            @endforeach
        </select>
    </div>
    <div class = "col-md-12 mt-2">
      {{ Form::submit('Save', array('class' => 'btn btn-primary')) }}
    </div>
  </div>
{{ Form::close() }}

Ваш контроллер работает так:

use Input;

public function store(Request $request)
    {
        $this->validate($request, array(
            'name' => 'required',
            'price' => 'required|numeric',
            'type_id' => 'required|numeric',
            'photo' => 'required',
        ));
        $item = new Menu;
        $item->name = $request->input('name');
        $item->price = $request->input('price');
        $item->type_id = $request->input('type_id');
        if ($request->hasFile('photo')) {
          $photo = Input::file('photo');
          $filename = 'MenuItem' . '-' . time() . '.' . $photo->getClientOriginalExtension();
          $location = public_path('images/'. $filename);
          $img = Image::make($photo->getRealPath());
          $img->resize(500, 500, function ($constraint) {
            $constraint->aspectRatio();
          })->save($location);
          $item->photo = $filename;
        }
        $item->save();
        Session::flash('success', 'Menu Item Saved Successfully.');
        return redirect()->back();
}

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