我不明白为什么这不起作用?
我在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);
}