CodeIgniter 4 中上传字段强制问题

问题描述 投票:0回答:1

我有一个涉及

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>&nbsp;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
字段的强制性问题。

php codeigniter
1个回答
0
投票

以下是修改更新方法的方法:

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'));
}
© www.soinside.com 2019 - 2024. All rights reserved.