You are here

public function TablefieldController::exportCsv in TableField 8.2

Menu callback to export a table as a CSV.

Parameters

\Drupal\Core\Entity\EntityInterface $entity: The entity object.

string $field_name: The machine name of the field to load.

string $langcode: The language code specified.

string $delta: The field delta to load.

Return value

\Symfony\Component\HttpFoundation\StreamedResponse A streamed response containing tablefield data as a CSV.

1 string reference to 'TablefieldController::exportCsv'
tablefield.routing.yml in ./tablefield.routing.yml
tablefield.routing.yml

File

src/Controller/TablefieldController.php, line 57

Class

TablefieldController
Controller routines for tablefield routes.

Namespace

Drupal\tablefield\Controller

Code

public function exportCsv(EntityInterface $entity, $field_name, $langcode, $delta) {
  $filename = sprintf('%s_%s_%s_%s_%s.csv', $entity
    ->getEntityTypeId(), $entity
    ->id(), $field_name, $langcode, $delta);

  // Tablefield::rationalizeTable($entity->{$field_name}[$delta]->value);.
  $table = $entity->{$field_name}[$delta]->value;
  $separator = \Drupal::config('tablefield.settings')
    ->get('csv_separator');
  $response = new StreamedResponse();
  $response
    ->setCallback(function () use ($table, $separator) {
    ob_clean();
    $handle = fopen('php://output', 'w+');
    if (!empty($table) && $handle) {
      foreach ($table as $row) {
        if (is_array($row) && !is_null($row)) {
          fputcsv($handle, $row, $separator);
        }
      }
    }
    fclose($handle);
  });
  $response
    ->setStatusCode(200);
  $response->headers
    ->set('Content-Type', 'text/csv; charset=utf-8');
  $response->headers
    ->set('Content-Disposition', 'attachment; filename="' . $filename . '"');
  return $response;
}