Symfony Получение данных методом POST

xScorp1oNx

Новичок
Всем доброго времени суток! Столкнулся с проблеммой получения данных с формы, в контроллер.
Опишу в 2 словах проблему:
Есть файл *.xlsx из которого необходимо считаю информацию, и высветить все это дело в браузере, что-бы пользователь закинул туда еще файл PDF, и нажав кнопку - вся инфа записалась в БД.
информация такого вида:
Array
(
[0] => Array
(
[name] =>
[number] => FA/0004/12/16
[amount] => 861.00
[status] => not_paid
[date_start] => 2016-12-11
[date_stop] => 2016-12-25
[daydeadline] => 0
[company] => 1
[companykontr] => 10
)

[1] => Array
(
[name] =>
[number] => FA/0005/12/16
[amount] => 43.05
[status] => not_paid
[date_start] => 2016-12-12
[date_stop] => 2016-12-26
[daydeadline] => 0
[company] => 1
[companykontr] => 9
)

)

Далее я создал форму в twig:
принял этот массив и отобразил:
<form action="" method="post">
{% for x in xls %}
<div id=" {{ x.number }}" >
<tr> <td> <input type="text" id="number" name="number" value="{{ x.number }}" class="form-control"/> </td>

<td> <input type="text" id="name" name="name" value="{{ x.name }}" class="form-control"/></td>

<td> <input type="number" id="amount" name="amount" value="{{ x.amount }}" class="form-control"/></td>

<td> <input type="text" id="company" name="company" value="{{ x.company }}" class="form-control"/></td>

<td> <input type="text" id="companykontr" name="companykontr" value="{{ x.companykontr }}" class="form-control"/></td>

<td> <input type="date" id="date_start" name="date_start" value="{{ x.date_start }}" class="form-control"/></td>

<td> <input type="date" id="date_stop" name="date_stop" value="{{ x.date_stop }}" class="form-control"/></td>

<td> <input type="text" id="status" name="status" value="{{ x.status }}" class="form-control"/></td>

<td> <input type="file" id="brochure" name="brochure" class="form-control"/></td></tr>

</div>

{% endfor %}
<input name="submit" type="submit" value="Submit" />
</form>


используя в контроллере:
$post->request->all();
мне возвращает только второй элемент массива. Каким образом можно вернуть всю информацию в виде массива? А не последний <div>?
знаю что данный способ форм не желательный, но не разобрался как иначе передать значения через форм тайп?
Спросить нет у кого, поэтому пишу тут. Спасибо за помощь.
 

fixxxer

К.О.
Партнер клуба
<input type="text" name="number[]" value="{{ x.number }}" class="form-control"/>

и так везде
 

xScorp1oNx

Новичок
нифига себе магия)) вышло такое, спасибо:
Array
(
[submit] => Submit
[number] => Array
(
[0] => FA/0004/12/16
[1] => FA/0005/12/16
)

[name] => Array
(
[0] =>
[1] =>
)

[amount] => Array
(
[0] => 861.00
[1] => 43.05
)

[company] => Array
(
[0] => 1
[1] => 1
)

[companykontr] => Array
(
[0] => 10
[1] => 9
)

[date_start] => Array
(
[0] => 2016-12-11
[1] => 2016-12-12
)

[date_stop] => Array
(
[0] => 2016-12-25
[1] => 2016-12-26
)

[status] => Array
(
[0] => not_paid
[1] => not_paid
)

[brochure] => Array
(
[0] => Symfony_book_master1.pdf
[1] => Symfony_book_master2.pdf
)

)
 
Последнее редактирование:

antson

Новичок
Партнер клуба
Специально поискал в интернете. Вроде бы очевидный для меня факт про квадратные скобки,
но как-то обойден вниманием . в хтмлбуке только намек в комментах, в спецификации html5 ничего.
http://php.net/manual/ru/faq.html.php - но вот это можно найти только зная, что искать.
 

Вурдалак

Продвинутый новичок
в хтмлбуке только намек в комментах, в спецификации html5 ничего
Это не имеет отношения к самому HTML, это фишка некоторых server-side фреймворков и PHP. Единственное, от HTML тут требуется гарантия, что поля с одинаковыми именами будут отправляться.
 

xScorp1oNx

Новичок
дабы не создавать отдельную тему:
У меня уже есть рабочие формы и скрипт записи файлов PDF, но тут я использую совершенно другую конструкцию форм. И соответственно возникают ошибки не понятно откуда. Может кто-то сталкивался с такой проблемой?
Массив который я принимаю с формы:
Array
(
[submit] => Submit
[number] => Array
(
[0] => FA/0004/12/16
[1] => FA/0005/12/16
)

[name] => Array
(
[0] =>
[1] =>
)

[amount] => Array
(
[0] => 861.00
[1] => 43.05
)

[company] => Array
(
[0] => 1
[1] => 1
)

[companykontr] => Array
(
[0] => 10
[1] => 9
)

[date_start] => Array
(
[0] => 2016-12-11
[1] => 2016-12-12
)

[date_stop] => Array
(
[0] => 2016-12-25
[1] => 2016-12-26
)

[status] => Array
(
[0] => not_paid
[1] => not_paid
)

[brochure] => Array
(
[0] => Symfony_book_master1.pdf
[1] => Symfony_book_master2.pdf
)

)

В контроллере написал такой скрипт:

$post = Request::createFromGlobals();

if ($post->request->has('submit')) {


$data = $post->request->all();
$count = count($data['number']);
$i = 0;


foreach ($data as $key => $value) {
$reminder = new Reminder;

$name = $data['name'][$i];
$number = $data['number'][$i];
$amount = $data['amount'][$i];
$status = $data['status'][$i];
$date_start = $data['date_start'][$i];
$date_stop = $data['date_stop'][$i];
$Companyid = $data['company'][$i];('company');
$Companykontrid = $data['companykontr'][$i];
$daydeadline = 0;
$file = $data['brochure'][$i];
$fileName = uniqid() . '.' . $file->guessExtension();
$file->move(
$this->getParameter('brochures_directory'),
$fileName
);


$reminder->setName($name);
$reminder->setNumber($number);
$reminder->setAmount($amount);
$reminder->setStatus($status);
$reminder->setDateStart($date_start);
$reminder->setDateStop($date_stop);
$reminder->setDaysDeadline($daydeadline);
$reminder->setBrochure($fileName);
$reminder->setCompanyid($Companyid);
$reminder->setCompanykontrid($Companykontrid);

$em = $this->getDoctrine()->getManager();
$em->persist($reminder);
$em->flush();
$i++;

}
return $this->redirect('/');
}


у меня выскакивают 2 ошибоки:
1) Fatal error: Call to a member function guessExtension() on a non-object in C:\OpenServer\domains\reminder\src\AppBundle\Controller\ImportController.php on line 118
я так понимаю что косяк в загрузке файла.

2) Если заментировать кусок кода :
$file = $data['brochure'][$i];
$fileName = uniqid() . '.' . $file->guessExtension();
$file->move(
$this->getParameter('brochures_directory'),
$fileName
);
выскакивает ошибка:
Fatal error: Call to a member function format() on a non-object in C:\OpenServer\domains\reminder\vendor\doctrine\dbal\lib\Doctrine\DBAL\Types\DateType.php on line 53
Тут какой-то косяк во времени?
В БД поле date_start имеет формат Date (Y. m. d).
 

xScorp1oNx

Новичок
я уже был там, и этот кусок кода работает уже у меня на другой странице сайта. Проблема заключается в том, что я делал выгрузку из БД и использовал FormType. Сейчас я использую обычную форму HMTL в файле twig. Что для меня не совсем понятно как это работает ... и возможно ли отослать массив в форму, отредактировать ее и выслать назад в контроллер POST и записать в БД данные с помощью FormType?
P.S: как я уже не пробовал комбинировать.
$file = $reminder->getBrochure(); - изначально было так
 
Сверху