首页 > 解决方案 > 如何解决传递给 CodeIgniter\Validation\Validation::run() 的参数 1 必须是数组类型或 null,给定的对象?

问题描述

我在 Codeigniter 4 中进行文件验证时遇到问题。代码如下。

验证文件中的代码是:

public $image = [
    'image_path'    => [
        'label'         => 'Image',
        'rules'         => 'uploaded[image_path]|is_image[image_path]|max_size[image_path, 1024]|mime_in[image_path,image/jpg,image/jpeg,image/png]'
            ]
    ];

并且,控制器中的代码是:

if($image->isValid() && !$image->hasMoved()):
    if(!$this->validation->run($image, "image")):
       $this->session->setFlashdata('image_errors', $this->validation->getErrors() ?? "");
       return redirect()->back()->withInput();
    endif;
endif;

但是每当我尝试运行这些代码时,都会发生以下错误:

Argument 1 passed to CodeIgniter\Validation\Validation::run() must be of the type array or null, object given.

请为此建议我可能的解决方案。

谢谢你。

标签: phpmodel-view-controllercodeigniter-4

解决方案


当我们需要在控制器中验证表单时,我们遵循以下步骤:

  1. 使用 validate() 方法而不是使用 $validation 属性请参阅控制器验证数据
  2. 在 recirect()->with() 方法中设置 flashdata 参见常用函数
  3. if 条件语法应使用方括号 { },仅在视图文件中使用 if else endif(可选)。请参阅替代语法

非常重要,建议阅读用户指南

if ($image->isValid() && ! $image->hasMoved())
{
    if (! $this->validate('image'))
    {
        return redirect()->back()->withInput()->with('image_errors', $this->validator->getErrors())
    }
}

如果你想使用验证类就这样做

if ($image->isValid() && ! $image->hasMoved())
{
    $this->validation->setRuleGroup('image');

    if (! $this->validation->withRequest($this->request)->run())
    {
        return redirect()->back()->withInput()->with('image_errors', $this->validation->getErrors())
    }
}

我希望它适用于您的代码。


推荐阅读