Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Access变量在Excel::load in Laravel之外_Php_Laravel_Laravel Excel - Fatal编程技术网

Php Access变量在Excel::load in Laravel之外

Php Access变量在Excel::load in Laravel之外,php,laravel,laravel-excel,Php,Laravel,Laravel Excel,我想问,当我在Excel::load函数中执行a foreach循环时,如何访问错误消息变量,该函数读取我上传的csv文件,以便通过Response::json()返回它 这是我的密码: $errorMessage['error'] = []; if($request->hasFile('file')){ if($request->file('file')->getClientOriginalExtension() != "csv"){

我想问,当我在Excel::load函数中执行a foreach循环时,如何访问错误消息变量,该函数读取我上传的csv文件,以便通过Response::json()返回它

这是我的密码:

$errorMessage['error'] = [];

        if($request->hasFile('file')){
            if($request->file('file')->getClientOriginalExtension() != "csv"){
                $errorMessage['error'][] = "File should be in csv format";
            }
            else {

                $fileName = $request->file('file')->getClientOriginalName().".csv";
                $destination = base_path().'/storage/excel/imports';
                $request->file('file')->move($destination, $fileName);

                $csvFile = base_path().'/storage/excel/imports/'.$fileName;

                $demographics = $request->get('demographics');

                \Excel::load($csvFile, function($reader) use($demographics,$errorMessage) {
                        if($demographics == "region"){
                            foreach($reader->get()->toArray() as $data){
                                $region = Region::whereRaw("LCASE(`short_name`) = ?", array(strtolower($data['region_name'])))->first();
                                if($region){
                                    $regionData = Region::find($region->id);
                                    $regionData->total_number_of_provinces = $data['total_provinces'];
                                    $regionData->total_number_of_cities_municipalities = $data['total_cities_and_municipalities'];
                                    $regionData->save();

                                }
                                else {
                                    $errorMessage['error'][] = $data['region_name'] . " is not existing in the database";
                                }
                            }
                        }

                });
            }
        }
        else {
            $errorMessage['error'][] = "Please specify a file";
        }

        return \Response::json($errorMessage);

有点难闻,但您可以将其声明为类属性

/**
* @var array
*/
protected $errorMessage;

public function doStuff()
{
    // ...

    \Excel::load($file, function($reader) use ($demographics) {

        // ...

        $this->errormessage['error'][] = $data['region_name'];
    });

    // ...

    return \Response::json($this->errorMessage);
}
注意

您还可以通过引用传递
$errorMessage
,很多人认为这是更好的选择(毕竟您使用的是一次性函数)

然而,我不喜欢这样做,因为在我看来,我想做的事情可读性较差。不过你可以选择其中一个

有用且简短的解释:

$fileName=md5(time())。$request->file('file')->getClientOriginalExtension();
$sheet_id=$request->session()->get('sheet_id');
$excel=excel::load(公共路径('/uploads/importsheet/').$fileName),函数($reader)use($sheet\u id){
$reader->each(函数($sheet)使用($sheet_id){
$headers=$sheet->keys()->toArray();
对于($i=0;$iinsertGetId)(
[
“导入图纸id”=>$sheet\U id,
“属性”=>$headings[$i],
'创建于'=>日期('Y-m-d H:i:s'),
'更新日期'=>日期('Y-m-d H:i:s')
]);
}        
});
});
希望上面的示例代码能有所帮助

\Excel::load($file, function($reader) use ($demographics, &$errorMessage)
   $fileName = md5(time()) .'.'.$request->file('file')->getClientOriginalExtension();
   $sheet_id  = $request->session()->get('sheet_id');
   $excel=Excel::load(public_path('/uploads/importsheet/'.$fileName),function ($reader)use ($sheet_id) {

        $reader->each(function($sheet) use ($sheet_id) {                                                
            $headings = $sheet->keys()->toArray();              
            for($i=0; $i<count($headings); $i++){
                $sheet_id = DB::table('import_sheets_attributes')->insertGetId(
                    [
                        'import_sheets_id' => $sheet_id,
                        'attribute'  => $headings[$i],
                        'created_at' => date('Y-m-d H:i:s'),
                        'updated_at' => date('Y-m-d H:i:s')
                    ]);
            }        
        });
    });