экспорт CSV в Zend Framework - PullRequest
       20

экспорт CSV в Zend Framework

15 голосов
/ 16 июля 2009

Я пытаюсь экспортировать таблицу базы данных в виде .csv, загружаемого из браузера. Мой код основан на Zend Framework, и я почти со следующим действием:

public function exportTableAction()
{
    $this->_helper->layout->disableLayout();
    $this->_helper->viewRenderer->setNoRender();

    $fileName = $this->_getParam('fileName');
    $tableName = $this->_getParam('tableName');       

    header('Content-type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.$fileName.'"');

    echo $this->getCsv($tableName, $fileName);
}

Я могу загрузить свой файл .csv, содержащий действительные данные. Однако, даже если я отключил макет и средство визуализации, я все равно получаю вывод заголовка, боковой панели и нижнего колонтитула моей страницы в конце моего файла .csv. Есть ли способ отключить любой вывод html, кроме того, который генерируется в моей exportTableAction? Или я могу отправить информацию заголовка и строку csv в браузер другим способом?

Кстати: я использую плагин стека действий, чтобы помочь мне визуализировать заголовок и боковую панель следующим образом:

...
$actionStack = $front->getPlugin('Zend_Controller_Plugin_ActionStack');
$actionStack->pushStack($userlogAction);
$actionStack->pushStack($rightcolAction);

Ура, Адриан

Ответы [ 4 ]

7 голосов
/ 16 июля 2009

Мы нашли решение проблемы. Я заменил следующую строку

$this->_helper->viewRenderer->setNoRender();

от

$this->_helper->viewRenderer->setNeverRender();

Если используется setNeverRender (), представления не отображаются (из плагина тоже)

6 голосов
/ 29 января 2011

Вы можете использовать помощник действий contextSwitch.

public $contexts = array(
    'test'     => array('csv')
);

public function testAction()
{
    $filename = time() . '.csv';
    $this->_helper->contextSwitch()->addContext('csv',
            array('suffix' => 'csv',
                  'headers' => array('Content-Type' => 'application/csv',
                                     'Content-Disposition' => 'attachment; filename="'. $filename.'"')))->initContext('csv');
    ........................
    ........................
}
1 голос
/ 24 октября 2013
$this->_helper->viewRenderer->setNoRender();
$this->view->layout()->disableLayout();

$response = $this->getResponse();
$response->setHeader('Content-type', 'application/octet-stream');
$response->setHeader('Content-Disposition', 'attachment; filename="contatos.csv"');

echo $your_csv_content;
0 голосов
/ 20 августа 2010
public function getCsv($tableName, $fileName)
{   
    $content = new $tableName();

    $content_arr = array();     
    $content_arr = $content->fetchAll('1=1','id ASC');

    $csv_terminated = "\n";
    $csv_separator = ",";
    $csv_enclosed = '"';
    $csv_escaped = "\\";        

    $schema_insert = "";

    $l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed,
    stripslashes("Email Address")) . $csv_enclosed;
    $schema_insert .= $l;
    $schema_insert .= $csv_separator;

    $l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed,
    stripslashes("Add Date")) . $csv_enclosed;
    $schema_insert .= $l;
    $schema_insert .= $csv_separator;

    $out = trim(substr($schema_insert, 0, -1));
    $out .= $csv_terminated;

    if(count($content_arr) > 0)
    {               
        foreach($content_arr as $content)
        {   
             $schema_insert = '';

            if ($content->email != '' || $content->add_date != '')
            {                           
                    $schema_insert .= $csv_enclosed . 
                    str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $content->email) . $csv_enclosed;

                     $schema_insert .= $csv_separator;

                    $schema_insert .= $csv_enclosed . 
                    str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $content->add_date) . $csv_enclosed;
                    $schema_insert .= $csv_separator;

           }        

            $schema_insert .= $csv_separator;
            $out .= $schema_insert;
            $out .= $csv_terminated;

        }
    }
    return $out;
}`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...