a eredeti hogyan:
Symfony Howto: Export tabular data to a csv file?
Ennek teljese kidolgozott változata található itt.
A mymodule/Csv az adatokat ;-vel elválasztva megjeleníti.
Action:

[php]
<?php
class mymoduleActions extends autoMyActions
{
public function executeCsv(sfWebRequest $request)
{
$this->pager = $this->getPager();
$c=$this->pager->getCriteria();
$c->setLimit(false);
$this->rows=$this->pager->getResults();
// $response = $this->getResponse();
// $response->setHttpHeader(‘Content-type’, ‘application/msexcel’);
// $response->setHttpHeader(‘Content-Disposition’, ‘attachment; filename=akarmi.csv’);
}
}
[/php]

csvSuccess.php:

[php]
<?php
use_helper(‘I18N’);
$rowBefore = ”;
$rowAfter  = "\r\n";
$cellBefore = ”;
$cellAfter = ‘;’;
$cellHeadBefore = ”;
$cellHeadAfter =’;’;
echo $rowBefore;
echo $cellHeadBefore.iconv(‘UTF-8’, ‘WINDOWS-1250’, __(‘Head1’)).$cellHeadAfter;
echo $cellHeadBefore.iconv(‘UTF-8’, ‘WINDOWS-1250’, __(‘Head1’)).$cellHeadAfter;
echo $rowAfter;
foreach($rows as $row)
{
echo $rowBefore;
echo $cellBefore.iconv(‘UTF-8’, ‘WINDOWS-1250’, $row->getMezo1()).$cellAfter;
echo $cellBefore.iconv(‘UTF-8’, ‘WINDOWS-1250’, $row->getMezo2()).$cellAfter;
echo $rowAfter;
}
[/php]

Ezután már csak a következőket kell beállítani:

  • vigyünk fel egy új routing szabályt a routing.yml fájlba
    [text]
    export_excel:
    url: /export.csv
    param: {module: myModule, action: csv}
    [/text]
  • Apache mod_rewrite esetén egy új szabályra van szükség az apache .htaccess fájlba a .csv fájlok elérése végett.
    [text]RewriteCond %{REQUEST_URI} !\.csv$[/text]
  • A mymodule/config/view.yml fájlba vigyük fel az aléábbi sorokat:
    [text]
    csvSuccess:
    has_layout: off
    http_metas:
    content-type: application/msexcel
    Content-Disposition: attachment; filename=mymodule_<?php echo date(‘Ymd’)?>.csv[/text]
  • vagy az actionben
    [php]
    $response = $this->getResponse();
    $response->setHttpHeader(‘Content-type’, ‘application/msexcel’);
    $response->setHttpHeader(‘Content-Disposition’, ‘attachment; filename=mymodule-‘.date(‘Ymd’).’.csv’);
    $this->setLayout(false);
    [/php]

még egy fontos dolog:
Vagyis ha a szokványos módon csak egy táblázatot teszünk ki és azt mondjuk hogy az egy Excel fájl, akkor néha szükség lehet egy cellában több sorra is, akkor a <br> az alábbi stílussal fog működni:
[php]
br {mso-data-placement:same-cell;}
[/php]