Я пытаюсь экспортировать некоторые модели в CSV на основе шаблонов.
У меня есть CSVWriter
<?php
namespace App\Http\DataExport;
use App\Http\DataExport\WriterInterface;
use App\Http\DataExport\CSVGenerator;
use League\Csv\Writer;
use Storage;
class CSVWriter implements WriterInterface
{
/**
* @var Storage
*/
private $files;
private $generator;
/**
* @param Storage $files
* @return void
*/
public function __construct(Storage $files)
{
$this->files = $files;
}
/**
* Write the data to a file and return the path
*
* @param string $template
* @param array $data
* @return string
*/
public function write($template, array $data)
{
$filename = sprintf('export-%s.csv', time()); //filename to export
$pathToWrite = '/storage/export-templates/';
$template = $pathToWrite.sprintf('%s.php', strtolower($template));
/** New file from template **/
$writer = Writer::createFromPath($template, 'a+');
/** New generator from writer template */
$generator = new CSVGenerator($writer);
file_put_contents($pathToWrite . $filename, $generator->generate($template, $data));
$path = sprintf($pathToWrite . '%s', $filename);
return $path;
}
}
?>
Использование League CSV
У меня есть этот генератор:
<?php
namespace App\Http\DataExport;
use League\Csv\Writer;
class CSVGenerator implements FileGeneratorInterface
{
/**
* @var Writer
*/
private $writer;
/**
* @param Writer $writer
* @return void
*/
public function __construct(Writer $writer)
{
$this->writer = $writer;
}
/**
* Build the template data
*
* @param string $template
* @param array $data
* @return array
*/
public function build($template, array $data)
{
/* TO CHECK / TODO */
return call_user_func(require $template, [$data]);
}
/**
* Generate the CSV file
*
* @param string $template
* @param array $data
* @return Writer
*/
public function generate($template, array $data)
{
return $this->writer->insertAll($this->build($template, $data));
}
}
?>
data
пока что просто продукт:
array:12 [
"product_id" => 1
"sku" => "SKU1234567"
"name" => "Tenis shoes"
"unique_id" => null
"organization_id" => 1
"created_at" => "2018-09-10 08:23:12"
"updated_at" => "2018-09-10 08:23:12"
"upc" => "1351125"
"external_code" => "1596916"
"vat" => "9"
"ean" => "215511"
"deleted_at" => null
]
Он будет писать внутри шаблона (файл php). Внутри CSV напишет целое число, потому что функция insertAll()
возвращает количество символов, вставленных в файл.
Что я делаю не так?