我有一个涉及
avatar
上传字段的问题:我不希望该字段是必需的,我不想更新头像图片,我该如何解决这个问题?
edit.php
<form method="POST" action="<?= site_url('customer/update/'.$customer['id']) ?>" enctype="multipart/form-data">
<?= csrf_field() ?>
<input type="hidden" name="_method" value="PATCH">
<div class="form-group">
<label for="avatar">Avatar:</label>
<input class="form-control <?= isset($errors['avatar']) ? 'is-invalid' : '' ?>" name="avatar[]" type="file" multiple />
<?php echo session()->getFlashdata('errors')["avatar"] ?? "";?>
</div>
<br>
<button type="submit" class="btn btn-primary"><i class="fa fa-arrows-rotate"></i> Update</button>
</form>
CustomerController.php
public function update($id)
{
$model = new CostumerModel();
$validations = new CustomerValidation();
if (!$this->validate($validacoes->customer_update)) {
return redirect()->back()->withInput()->with('errors', $this->validator->getErrors());
}
$processed_data = [
'customer_name' => trim($this->request->getVar('customer_name')),
];
$model->update($id, $processed_data);
if ($this->request->getFileMultiple('avatar')[0]->isValid()) {
$avatar_model = new AvatarModel();
$avatar_model->where('customer_id', $id)->delete();
foreach ($this->request->getFileMultiple('avatar') as $avatar) {
$original_name = $avatar->getName();
$image_path = 'uploads/avatars/' . $id . '/' . $original_name;
$avatar->move(WRITEPATH . 'uploads/avatars/' . $id, $original_name);
$avatar_model->insert([
'customer_id' => $id,
'image' => $image_path,
]);
}
}
return redirect()->to(route_to('indexPerson'));
}
CustomerValidation.php
public array $customer_update = [
'avatar' => 'permit_empty',
];
如何解决
avatar
字段的强制性问题。
以下是修改更新方法的方法:
public function update($id)
{
$model = new CostumerModel();
$validations = new CustomerValidation();
// Get the avatar files
$avatarFiles = $this->request->getFileMultiple('avatar');
// Validate only if avatar files are provided
if (!empty($avatarFiles)) {
if (!$this->validate($validations->customer_update)) {
return redirect()->back()->withInput()->with('errors', $this->validator->getErrors());
}
}
// Process other data
$processedData = [
'customer_name' => trim($this->request->getVar('customer_name')),
];
$model->update($id, $processedData);
// Handle avatar update if files are provided
if (!empty($avatarFiles)) {
$avatarModel = new AvatarModel();
$avatarModel->where('customer_id', $id)->delete();
foreach ($avatarFiles as $avatar) {
if ($avatar->isValid()) {
$originalName = $avatar->getName();
$imagePath = 'uploads/avatars/' . $id . '/' . $originalName;
$avatar->move(WRITEPATH . 'uploads/avatars/' . $id, $originalName);
$avatarModel->insert([
'customer_id' => $id,
'image' => $imagePath,
]);
}
}
}
return redirect()->to(route_to('indexPerson'));
}