无法更新 Laravel 中的照片,因为验证甚至可以在创建个人资料人物时上传照片
can't update photo in Laravel because validation even can upload photo when create a profile person
我无法在更新个人资料时上传照片,即使我在第一次创建个人资料时可以上传照片。在更新部分,我将验证放在照片更新和创建的表单请求中。这是
'foto' => 'sometimes|image|max:500|mimes:jpeg,jpg,bmp,png',
创建时上传的一切都很好。但是,当上传更新时,由于验证出现警告。这样'The PHOTO must be an image.'或者'The PHOTO must be a file of type: jpeg,jpg,bmp,png.'
这是我的代码:
在控制器上进行更新:
public function update(Siswa $siswa, SiswaRequest $request){
$input = $request->all();
if($request->hasFile('foto')) {
$exist = Storage::disk('foto')->exists($siswa->foto);
if(isset($siswa->foto) && $exist) {
$delete = Storage::disk('foto')->delete($siswa->foto);
}
$foto = $request->file('foto');
$ext = $foto->getClientOriginalExtension();
if ($request->file('foto')->isValid()) {
$foto_name = date('YmdHis').".$ext";
$upload_path = 'fotoupload';
$request->file('foto')->move($upload_path, $foto_name);
$input['foto'] = $foto_name;
}
}
$siswa->update($input);
$telepon = $siswa->telepon ?? new Telepon();
$telepon->nomor_telepon = $request->input('nomor_telepon');
$siswa->telepon()->save($telepon);
$siswa->hobi()->sync($request->get('hobi_siswa', []));
return redirect('siswa');
}
这是我在请求中用于验证的代码
public function rules()
{
if($this->method() == 'PATCH') {
$id_rules = 'required|numeric|digits:8|unique:siswa,id,' . $this->get('id');
$telepon_rules = 'sometimes|numeric|digits_between:10,15|unique:telepon,nomor_telepon,' . $this->get('id') . ',id_siswa';
}
else {
$id_rules = 'required|numeric|digits:8|unique:siswa,id';
$telepon_rules = 'sometimes|numeric|digits_between:10,15|unique:telepon,nomor_telepon';
}
return [
'id' => $id_rules,
'nama_siswa' => 'required|regex:/^[\pL\s]+$/u|max:30',
'tanggal_lahir' => 'required|date',
'jenis_kelamin' => 'required|in:L,P',
'nomor_telepon' => $telepon_rules,
'id_kelas' => 'required',
'foto' => 'sometimes|image|max:500|mimes:jpeg,jpg,bmp,png',
];
}
所以,我根本无法更新我的照片。修复方法如何?
将此添加到您的表单中。也许这会解决它。
enctype="multipart/form-data"
:
<form action="..." class="...." method="post" enctype="multipart/form-data">
我无法在更新个人资料时上传照片,即使我在第一次创建个人资料时可以上传照片。在更新部分,我将验证放在照片更新和创建的表单请求中。这是
'foto' => 'sometimes|image|max:500|mimes:jpeg,jpg,bmp,png',
创建时上传的一切都很好。但是,当上传更新时,由于验证出现警告。这样'The PHOTO must be an image.'或者'The PHOTO must be a file of type: jpeg,jpg,bmp,png.'
这是我的代码:
在控制器上进行更新:
public function update(Siswa $siswa, SiswaRequest $request){
$input = $request->all();
if($request->hasFile('foto')) {
$exist = Storage::disk('foto')->exists($siswa->foto);
if(isset($siswa->foto) && $exist) {
$delete = Storage::disk('foto')->delete($siswa->foto);
}
$foto = $request->file('foto');
$ext = $foto->getClientOriginalExtension();
if ($request->file('foto')->isValid()) {
$foto_name = date('YmdHis').".$ext";
$upload_path = 'fotoupload';
$request->file('foto')->move($upload_path, $foto_name);
$input['foto'] = $foto_name;
}
}
$siswa->update($input);
$telepon = $siswa->telepon ?? new Telepon();
$telepon->nomor_telepon = $request->input('nomor_telepon');
$siswa->telepon()->save($telepon);
$siswa->hobi()->sync($request->get('hobi_siswa', []));
return redirect('siswa');
}
这是我在请求中用于验证的代码
public function rules()
{
if($this->method() == 'PATCH') {
$id_rules = 'required|numeric|digits:8|unique:siswa,id,' . $this->get('id');
$telepon_rules = 'sometimes|numeric|digits_between:10,15|unique:telepon,nomor_telepon,' . $this->get('id') . ',id_siswa';
}
else {
$id_rules = 'required|numeric|digits:8|unique:siswa,id';
$telepon_rules = 'sometimes|numeric|digits_between:10,15|unique:telepon,nomor_telepon';
}
return [
'id' => $id_rules,
'nama_siswa' => 'required|regex:/^[\pL\s]+$/u|max:30',
'tanggal_lahir' => 'required|date',
'jenis_kelamin' => 'required|in:L,P',
'nomor_telepon' => $telepon_rules,
'id_kelas' => 'required',
'foto' => 'sometimes|image|max:500|mimes:jpeg,jpg,bmp,png',
];
}
所以,我根本无法更新我的照片。修复方法如何?
将此添加到您的表单中。也许这会解决它。
enctype="multipart/form-data"
:
<form action="..." class="...." method="post" enctype="multipart/form-data">