В проекте Symfony мне нужно сохранить некоторые данные таблицы в сущности, данные, которые должны быть загружены как CSV-документ в Администратор сонаты. Моя первая мысль заключалась в том, чтобы использовать тип данных Doctrine2 json_array
для хранения данных, но я был удивлен, обнаружив, что это не такая простая задача.Symfony2: использование поля файла Sonata для загрузки CSV-файла и сохранения его содержимого в Doctrine json_array type
После некоторого исследования я нашел Symfony\Component\Form\DataTransformerInterface, который, казалось, был правильным выбором для преобразования CSV-файла в массив. Проблема в том, что метод transform($value)
не получает загруженный файл в параметре $value
, поэтому я застрял в этом.
В классе сущность админ у меня есть:
$formMapper
[...]
->add($formMapper->create('discounts', 'file', array(
'required' => false,
'data_class' => null
))
->addViewTransformer(new CSVToArrayTransformer()))
где CSVToArrayTransformer
выглядит следующим образом:
class CSVToArrayTransformer implements DataTransformerInterface
{
public function transform($csvFile){
// here should take place the csv to array transformation, but $csvFile is null
}
}
Есть ли лучший способ, чтобы получить это?
Я читал, что рецепт кулинарной книги, но я не думаю, что это помогает. Методы 'prePersist' и' preUpdate' не могут изменить объект '$ entity', полученный в качестве параметра. Они могут использовать только содержащиеся в нем данные через 'getSomething()' для выполнения дополнительных задач, но не 'setSomething()'. В этом рецепте вы используете данные изображения для сохранения изображения, которое является другим объектом. В моем конкретном случае у меня нет объекта, связанного с CSV-файлом, мне просто нужны данные, чтобы сохранить его с тем же объектом, который контролируется этим классом администратора. Я нашел решение, опубликую его в ближайшее время. Благодаря! –
Пример в документе использует другой объект, но prePersist может использоваться для установки полей текущего объекта. Я сделал загрузку файла, добавив не-сопоставленный файл $, вызвав мой метод загрузки и установив поле entity с информацией uploadedFile, и все сделано с помощью prePersist hook. – chalasr
Ну что-то должно быть иначе. Я проверил это с другим свойством, и никаких изменений не было. –