表格中FuelPHP中表格列值的验证

时间:2013-12-27 17:08:49

标签: php fuelphp

在我的数据库中,我有4列,即名称,描述,图像和状态。在Oil scaffold创建的默认模板中,所有值都是预期的。

但在我的情况下,列'image'将是上传文件的名称,“status”smallint列将默认为1.但伪造失败是必需的。

在模型验证中,validate()执行如下操作。

public static function validate($factory) {
    $val = Validation::forge($factory);
    $val->add_field('name', 'Name', 'required|max_length[255]');
    $val->add_field('description', 'Description', 'required');
    $val->add_field('image', 'Image', 'required|max_length[255]');
    $val->add_field('status', 'Status', 'required');

    return $val;
}

据我了解,文件上传项目不属于表单。

在实际创建用于保存的Model对象之前调用$ val-> run()。它失败了,因为“图像”和“状态”的值在此之后填充。

   if (Input::method() == 'POST') {
        $val = Model_Category::validate('create');

        if ($val->run()) {
            Upload::process($config);

            if (Upload::is_valid()) {

                Upload::save(0);
                $arr = Upload::get_files();

                $category = Model_Category::forge(array(
                            'name' => Input::post('name'),
                            'description' => Input::post('description'),
                            'image' => $arr[0]['saved_as'],
                            'status' => 1,
                ));

            }
        } else {
            Session::set_flash('error', $val->error());
        }
    }

有没有更好的fuelPHP处理方式?如何改变控制器?或者如何更改模型?

1 个答案:

答案 0 :(得分:1)

“file”类型的表单输入字段的结果将在$ _FILES中,而不在$ _POST中。

由于验证仅适用于已发布的数据(或您传递给它的任何数组),因此无法验证这些输入字段。

您必须从验证定义中删除'image'字段,并让Upload类验证上传的文件。

这是一个更好的流程:

if (Input::method() == 'POST') {

    Upload::process($config);

    if (Upload::is_valid()) {
         Upload::save(0);

        if (Upload::is_valid()) {
            $val = Model_Category::validate('create');
            if ($val->run()) {
                $arr = Upload::get_files();

                $category = Model_Category::forge(array(
                            'name' => Input::post('name'),
                            'description' => Input::post('description'),
                            'image' => $arr[0]['saved_as'],
                            'status' => 1,
                ));

            } else {
                Session::set_flash('error', $val->error());
            }

        } else {
            // deal with the Upload errors, check Upload::get_errors()!
        }

    } else {
        // deal with the Upload errors, check Upload::get_errors()!
    }
}