【问题标题】:Validating Import CSV at Laravel在 Laravel 验证导入 CSV
【发布时间】:2016-11-28 16:23:32
【问题描述】:

我想在 laravel 5.2 中使用 matlab/Excel 导入 csv 文件,

价格应该是整数,但是当有人输入价格作为字符串时,我需要验证它。

这是我的代码:

Excel::filter( 'chunk' )->load( $path . $filename )->chunk( 1000, function( $results ) {
    foreach ( $results as $import_data ) {
        $validation = Validator::make( $import_data->toArray(), [
            'code' => 'required|alpha',
            'name' => 'alpha',
            'number' => 'alpha',
            'price' => 'numeric',
            'pages' => 'numeric',
            'delivery_id' => 'numeric'
        ] );
        if( $validation->fails() ) {
            return back();
        }

        if( $binder = Binder::where( 'code', $import_data->code )->first() ) {
            $binder->update( [
                'price' => $import_data->price,
                'pages' => $import_data->pages
            ] );
        } else {
            Binder::create( [
                'code' => $import_data->code,
                'name' => $import_data->name,
                'number' => $import_data->number,
                'price' => $import_data->price,
                'pages' => $import_data->pages,
                'delivery_id' => $import_data->delivery_id
            ] );
        }
    }
});

导入 csv 后,我的 return back() 根本不起作用,控制器仍在执行 foreach,如何启用我的验证?

【问题讨论】:

    标签: validation laravel csv import


    【解决方案1】:

    您从chunk() 方法返回,然后它继续调用同一chunk() 方法的下一次迭代,依此类推。我建议将整个东西包装在一个 try-catch-block 中并抛出异常。

    编辑:像这样:

    try {
        Excel::filter( 'chunk' )->load( $path . $filename )->chunk( 1000, function( $results ) {
            foreach ( $results as $import_data ) {
                // ...
                if( $validation->fails() ) {
                    throw new Exception();
                }
                // ...
            }
        )};
    } catch (Exception $e) {
        return back();
    }
    

    【讨论】:

    • 所以我必须使用另一个块?是的,我正在使用 try catch,但 try catch 没有得到异常,我没有得到错误原因。
    • 不,关键是你不应该使用更多的块。那个问题是它不断地进入下一个块。我会在我的帖子中添加我的意思。
    猜你喜欢
    • 2017-01-27
    • 2020-10-29
    • 1970-01-01
    • 2019-12-29
    • 2011-03-14
    • 2018-11-18
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多