In Magento 2 Native, One php class \Magento\Framework\App\Response\Http\FileFactory is used for create csv and download CSV by magento way. create() function in FileFactory.php is used for create CSV file.
There are many another way to download CSV file using Core PHP script but its not best way to use within Magento Coding standard.
You can write CSV and download a CSV file using just simple below code snippet in your controller file, namespace {your vendor}\CSV\Controller\Adminhtml\Index;
use Magento\Framework\App\Filesystem\DirectoryList;
class Export extends \Magento\Backend\App\Action
{
public function __construct(
\Magento\Backend\App\Action\Context $context,
\Magento\Framework\App\Response\Http\FileFactory $fileFactory,
\Magento\Framework\Filesystem $filesystem
) {
$this->orderRepository = $orderRepository;
$this->_fileFactory = $fileFactory;
$this->directory = $filesystem->getDirectoryWrite(DirectoryList::VAR_DIR);
parent::__construct($context);
}
public function execute()
{
$name = date('m_d_Y_H_i_s');
$filepath = 'export/custom' . $name . '.csv';
$this->directory->create('export');
/* Open file */
$stream = $this->directory->openFile($filepath, 'w+');
$stream->lock();
$columns = $this->getColumnHeader();
foreach ($columns as $column) {
$header[] = $column;
}
/* Write Header */
$stream->writeCsv($header);
$products[] = array(1,'Test 1','test 1',100);
$products[] = array(2,'Test 2','test 2',299);
foreach ($products as $item) {
$itemData = [];
$itemData[] = $item[0];
$itemData[] = $item[1];
$itemData[] = $item[2];
$itemData[] = $item[3];
$stream->writeCsv($itemData);
}
$content = [];
$content['type'] = 'filename'; // must keep filename
$content['value'] = $filepath;
$content['rm'] = '1'; //remove csv from var folder
$csvfilename = 'Product.csv';
return $this->_fileFactory->create($csvfilename, $content, DirectoryList::VAR_DIR);
}
/* Header Columns */
public function getColumnHeader() {
$headers = ['Id','Product name','SKU','Price'];
return $headers;
}
}
When you run controller action you can download CSV file using just Magento straight forward way.
Using the above way you can download CSV file using Magento 2 Way.you can customize on your requirement