在函数中访问方法外部的php变量


Accessing php variables outside of a method in a function

我不明白为什么这不起作用?

我在php工作,特别是laravel。

当我运行它时,我得到一个未定义的变量异常。

我想我会得到数组的bad_rows?

还有一个附带的问题,我如何重构它来使它更清晰?我应该提取Excel方法到自己的功能?

我基本上正在尝试导入列表,将其添加到数据库中,然后我将重定向到主页,其中包含未通过闪烁导入的行列表。

谢谢!

public function subscriberImportList(Request $request)
{

    'Excel::filter('chunk')->load($request->file('import_list'))->chunk(100, function($rows) use($request)
    {

        $bad_rows = [];
        foreach($rows as $row) 
        {
            if (is_null($row->name) || is_null($row->street_address) || is_null($row->city)){
                array_push($bad_rows, $row->name);
                }
            else {
                //New Subscriber Instance
                $subscriber = new Subscriber;
                //Set the name
                $subscriber->name = $row->name;
                //Set the street address
                $subscriber->street_address = $row->street_address;
                //Set the city,state zip
                preg_match('/([^,]+),'s*('w{2})'s*('d{5}(?:-'d{4})?)/', $row->city, $city_state_zip_seperated);
                if (!$city_state_zip_seperated) {
                    array_push($bad_rows, $row->name);                        
                }
                else {
                    $subscriber->city = $city_state_zip_seperated[1];
                    $subscriber->state = $city_state_zip_seperated[2];
                    $subscriber->zipcode = $city_state_zip_seperated[3];
                    //Persist the subscriber to the database
                    $subscriber->save();
                }
            }
        }
        return $bad_rows;
    });
    dd($bad_rows);

}

你有:

public function subscriberImportList(Request $request) {
    'Excel::[..snip..], function($rows) use($request) {
        $bad_rows = [];
        ^^^^^^^^^^------defined here
        blah blah blah
    });
    dd($bad_rows);
        ^^^^^^^^---used here
}

$bad_rows只在function($rows)闭包内定义,这意味着它是闭包内的局部变量,而不存在于其他地方。因此,当您尝试dd($bad_rows)时,您使用的是未定义变量。

你应该拥有的是

public function .... {
     $bad_rows = [];
     ^^^^^^^^^^^^^^^^
     'Exce..... function($row) use($request, $bad_rows) {
                                           ^^^^^^^^^^^^
            blah blah blah
     });
     dd($bad_rows);
}