Доброе утро.
Есть необходимость сделать класс для экспорта табличных данных из приложения: на вход даётся тип и данные, на выход — готовый файл. В коде я вижу это примерно так:
<?php
class DataExporter {
public function Create( $type ) {
$class = $type . 'Exporter';
return new $class;
}
}
class AbstractExporter {
public function setData( $data ) { ... }
public function getResult( ) { ... }
}
class CSVExporter extends AbstractExporter { ... }
class XLSXExporter extends AbstractExporter { ... }
<?php
$data = db::query( 'select * from table' );
$format = $request->get[ 'format' ];
$exporter = DataExporter::Create( $format );
$exporter->setData( $data );
echo $exporter->getResult( );
Проблема начинается когда хочется передать дополнительные параметры в каждый экспортер. Например, для xlsx - это стиль или ширина столбцов.
<?php
class XLSXExporter extends AbstractExporter {
public function setColumnWidth( $column, $width ) { ... }
public function setColumnStyle( $column, $style ) { ... }
}
Прописывать в каждом контроллере что-то вроде кода ниже очевидно неправильно.
<?php
$exporter = DataExporter::Create( $format );
$exporter->setData( $data );
if( $format == 'XLSX' ) {
$exporter->setColumnWidth( 0, 100 );
$exporter->setColumnWidth( 1, 30 );
$exporter->setColumnWidth( 2, 60 );
}
echo $exporter->getResult( );
Собственно, вопрос: как
по-красивому в фабрике (или, может, тут нужна не фабрика?) передать параметры от контроллера каждому создаваемому классу ?