Импорт CSV в Symfony 2
Я пытаюсь импортировать a .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;
}
Когда я пытаюсь протестировать его, в верхней части страницы появляется текст:
Массив ( [компьютеризованная] => компонент на Symfony\HttpFoundationфайл объектUploadedFile (файл [тест:на SymfonyкомпонентHttpFoundation\UploadedFile:частная] => [originalName:SymfonyComponentHttpFoundationFileUploadedFile: private] = > testcsv.csv [mimeType:SymfonyComponentHttpFoundationFileUploadedFile:private] => text/csv [size:SymfonyComponentHttpFoundationFileUploadedFile:private] => 491 [error:SymfonyComponentHttpFoundationFileUploadedFile:private] => 0 [pathName:SplFileInfo:private] => /Applications/MAMP/tmp/php/phpSr5O5S [fileName:splfileinfo:private] => 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"
Если вам не нужна форма, вы можете сделать это:
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. }
Comments