我不明白为什么这不起作用?
我在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);
}
答案 0 :(得分:3)
你有:
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
只在INSIDE中定义function($rows)
闭包,这意味着它是闭包内的局部变量,并且不存在于其他任何地方。因此,当您尝试dd($bad_rows)
时,您使用的是未定义的变量。
你应该拥有的是
public function .... {
$bad_rows = [];
^^^^^^^^^^^^^^^^
\Exce..... function($row) use($request, $bad_rows) {
^^^^^^^^^^^^
blah blah blah
});
dd($bad_rows);
}