argument unpackingの存在を思い出した

This commit is contained in:
shibafu 2020-02-16 23:17:07 +09:00
parent 84b955b195
commit 794cdf2be6
2 changed files with 13 additions and 10 deletions

View File

@ -13,7 +13,7 @@ class CsvImportException extends \RuntimeException
* CsvImportException constructor. * CsvImportException constructor.
* @param string[] $errors * @param string[] $errors
*/ */
public function __construct(array $errors) public function __construct(...$errors)
{ {
parent::__construct(array_first($errors)); parent::__construct(array_first($errors));
$this->errors = $errors; $this->errors = $errors;

View File

@ -43,7 +43,10 @@ class CheckinCsvImporter
if (!in_array('日時', $csv->getHeader(), true)) { if (!in_array('日時', $csv->getHeader(), true)) {
$errors[] = '日時列は必須です。'; $errors[] = '日時列は必須です。';
throw new CsvImportException($errors); }
if (!empty($errors)) {
throw new CsvImportException(...$errors);
} }
foreach ($csv->getRecords() as $offset => $record) { foreach ($csv->getRecords() as $offset => $record) {
@ -81,7 +84,7 @@ class CheckinCsvImporter
} }
if (!empty($errors)) { if (!empty($errors)) {
throw new CsvImportException($errors); throw new CsvImportException(...$errors);
} }
}); });
} }
@ -97,20 +100,20 @@ class CheckinCsvImporter
{ {
$fp = fopen($filename, 'rb'); $fp = fopen($filename, 'rb');
if (!$fp) { if (!$fp) {
throw new CsvImportException(['CSVファイルの読み込み中にエラーが発生しました。']); throw new CsvImportException('CSVファイルの読み込み中にエラーが発生しました。');
} }
try { try {
$head = fread($fp, $samplingLength); $head = fread($fp, $samplingLength);
if ($head === false) { if ($head === false) {
throw new CsvImportException(['CSVファイルの読み込み中にエラーが発生しました。']); throw new CsvImportException('CSVファイルの読み込み中にエラーが発生しました。');
} }
for ($addition = 0; $addition < 4; $addition++) { for ($addition = 0; $addition < 4; $addition++) {
$charset = mb_detect_encoding($head, ['ASCII', 'UTF-8', 'SJIS-win'], true); $charset = mb_detect_encoding($head, ['ASCII', 'UTF-8', 'SJIS-win'], true);
if ($charset) { if ($charset) {
if (array_search($charset, ['UTF-8', 'SJIS-win'], true) === false) { if (array_search($charset, ['UTF-8', 'SJIS-win'], true) === false) {
throw new CsvImportException(['文字コード判定に失敗しました。UTF-8 (BOM無し) または Shift_JIS をお使いください。']); throw new CsvImportException('文字コード判定に失敗しました。UTF-8 (BOM無し) または Shift_JIS をお使いください。');
} else { } else {
return $charset; return $charset;
} }
@ -122,12 +125,12 @@ class CheckinCsvImporter
} }
$next = fread($fp, 1); $next = fread($fp, 1);
if ($next === false) { if ($next === false) {
throw new CsvImportException(['CSVファイルの読み込み中にエラーが発生しました。']); throw new CsvImportException('CSVファイルの読み込み中にエラーが発生しました。');
} }
$head .= $next; $head .= $next;
} }
throw new CsvImportException(['文字コード判定に失敗しました。UTF-8 (BOM無し) または Shift_JIS をお使いください。']); throw new CsvImportException('文字コード判定に失敗しました。UTF-8 (BOM無し) または Shift_JIS をお使いください。');
} finally { } finally {
fclose($fp); fclose($fp);
} }
@ -154,10 +157,10 @@ class CheckinCsvImporter
break; break;
} }
if (mb_strlen($tag) > 255) { if (mb_strlen($tag) > 255) {
throw new CsvImportException(["{$line} 行 : {$column}は255文字以内にしてください。"]); throw new CsvImportException("{$line} 行 : {$column}は255文字以内にしてください。");
} }
if (strpos($tag, "\n") !== false) { if (strpos($tag, "\n") !== false) {
throw new CsvImportException(["{$line} 行 : {$column}に改行を含めることはできません。"]); throw new CsvImportException("{$line} 行 : {$column}に改行を含めることはできません。");
} }
$tags[] = Tag::firstOrCreate(['name' => $tag]); $tags[] = Tag::firstOrCreate(['name' => $tag]);