У меня есть код функции ниже, но он не сохраняет фотографию ни в базе данных, ни в пути к файлу.
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 ().
До сих пор не могу сохранить свою фотографию.
Снова добавляю свои запросы, теперь после добавления 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.SukelAli обновлено
@mafortis ваш реальный путь неверен, какая-то ошибка в конфигурации
обратитесь к этим двум ссылкам stackoverflow.com/questions/41900565/…stackoverflow.com/questions/12531408/…






"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 ().
Пожалуйста, попробуйте сейчас.
Попробуйте изменить эту строку
Image::make($photo)->resize(500, 500)->save($location);
Image::make($photo->getRealPath())->resize('200','200')->save($location);
Ваш реальный путь является ложной проверкой конфигурации
как я прокомментировал в набил ответ, который возвращает Image source not readable
Ваша версия ларавеля??
можешь сбросить $location
"C:\laragon\www\hrdapp/public\images/MenuItem-1549948461.jpg"какой у вас тип диска 'imagick' или 'gd' также проверьте разрешение на общедоступную папку
imagick выдает ошибку, которая требует некоторых расширений, поэтому я использую gd по умолчанию
Вы должны попробовать это:
Ваш файл просмотра, как это:
{!! 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();
}
Можете ли вы обновить код формы здесь.