Импорт CSV в Symfony 2
Я пытаюсь импортировать .csv файл в Symfony 2. Я создал файл, и теперь я хочу сохранить его в базе данных.
вот мой файл обработчик, где я хочу сделать .лечение csv и его сохранение:
public function process()
{
if ($this->request->getMethod() == 'POST')
{
$this->form->bindRequest($this->request);
$tableau = array();
$i = 0;
$c = 0;
$num = 0;
if (isset($_FILES['file']))
{
$file = $_FILES['file']['tmp_name'];
$handle = fopen($file,'r');
$row = 1;
$handle = fopen("$file", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$num =+ count($data);
$row++;
for ($c = $i; $c < $num; $c++)
{
$tableau[$c] = $data[$c];
$i++;
}
}
}
$tableau[$c+1] = $i;
/*
if ($this->form->isValid())
{
print_r($this->form->getData());
$this->onSuccess($this->form->getData());
return true;
}
*/
}
return false;
}
когда я пытаюсь проверить его, в верхней части моей страницы появляется текст:
массив ([fichier] => SymfonyComponentHttpFoundationFileUploadedFile объект ([тест: SymfonyComponentHttpFoundationFileUploadedFile: private] => [originalName:SymfonyComponentHttpFoundationFileUploadedFile: private] => testcsv.КШМ [тип:для SymfonyкомпонентHttpFoundationфайлUploadedFile:частная] => текст/CSV-файл [размер:на SymfonyкомпонентHttpFoundationфайлUploadedFile:частная] => 491 [ошибка:в SymfonyкомпонентHttpFoundationфайлUploadedFile:частная] => 0 [путь:SplFileInfo:частная] => /применения/MAMP/tmp/и в PHP/phpSr5O5S [именем:SplFileInfo:частная] => phpSr5O5S ) )
Я не понимаю тех вещи.
2 ответов
если вы хотите сделать правильный способ symfony2, вы должны создать форму symfony для отправки файла. Например:
// Your Controller.php
$form = $this->createFormBuilder()
->add('submitFile', 'file', array('label' => 'File to Submit'))
->getForm();
// Check if we are posting stuff
if ($request->getMethod('post') == 'POST') {
// Bind request to the form
$form->bindRequest($request);
// If form is valid
if ($form->isValid()) {
// Get file
$file = $form->get('submitFile');
// Your csv file here when you hit submit button
$file->getData();
}
}
return $this->render('YourBundle:YourControllerName:index.html.twig',
array('form' => $form->createView(),)
);
прутик:
<!-- index.html.twig Twig part -->
{% extends "YourBundle::layout.html.twig" %}
{% block content %}
<form action="" method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}
<input type="submit" />
</form>
{% endblock %}
Не забывайте, что {{ form_enctype(form) }}
важно сообщить, что мы отправляем файл. В Symfony2 будет генерировать enctype="multipart/form-data"
tag
Если вы не хотите форму, вы можете сделать это:
public function processAction() {
foreach($this->getRequest()->files as $file) {
if (($handle = fopen($file->getRealPath(), "r")) !== FALSE) {
while(($row = fgetcsv($handle)) !== FALSE) {
var_dump($row); // process the row.
}
}
}
//return response.
}