ZF2: передать переменную в пост отправки

В настоящее время я работаю над приложением в Zend Framework 2. Я работаю над календарем, и у меня есть две кнопки отправки в форме, чтобы перейти к следующему или предыдущему месяцу. Итак, теперь я хочу передать два значения (месяц и год) в форме при отправке так что я могу знать, в каком месяце я нахожусь.

Как вы можете видеть в классах ниже Я пытался сделать это с помощью скрытых полей, но я не знаю, как добавить данные или извлечь их впоследствии. Может кто-нибудь сказать мне, как это сделать или дать мне другое решение? Возможно ли это отправить весь класс CalendarMonth с формой?

Моя установка теперь имеет следующие классы:

Форма: CalendarForm.php

class CalendarForm extends Form {

protected $_id = null;

public function __construct()
{
parent::__construct('calendar');
$this->setAttribute('method', 'post');
$this->add(array(
'name' => 'month',
'attributes' => array(
'type'  => 'hidden',
),
));
$this->add(array(
'name' => 'year',
'attributes' => array(
'type'  => 'hidden',
),
));
$this->add(array(
'name' => 'previous',
'attributes' => array(
'type'  => 'submit',
'value' => 'Vorige',
),
));
$this->add(array(
'name' => 'next',
'attributes' => array(
'type'  => 'submit',
'value' => 'Volgende',
),
));
}

public function setId($id) {
$this->_id = $id;
}
}

Контроллер: CalendarController.php

class CalendarController extends AbstractActionController
{
private $calendarEventTable;

public function indexAction()
{
$calendarMonth = null;
$form = new CalendarForm();
$request = $this->getRequest();

if ($request->isPost()) {
$form->setData($request->getPost());
if($this->getRequest()->getPost('next'))
{
//Extract the values from the submitted form and recall the getCalenderPage() to recreate the CalendarMonth
echo "test";
echo ((isset($_POST['month']))     ? $_POST['month']     : null);

} else if($this->getRequest()->getPost('previous'))
{
//$this->calendarMonth->minusMonth();
}
} else {
$calendarMonth = $this->getCalendarPage(8, 2014);
}
$calendarMonth = $this->getCalendarPage(8, 2014);

//Add the values to the form
$collection = $form->get('month');
$collection->setAttribute("month", "test12356t");

return new ViewModel(array(
'calendarMonth' => $calendarMonth,
'form' => $form,
));
}

public function detailAction()
{
return new ViewModel(array(
'event' => $this->getCalendarTable()->getCalendar($this->getEvent()->getRouteMatch()->getParam('id')),
));
}

private function getCalendarTable()
{
if (!$this->calendarEventTable) {
$sm = $this->getServiceLocator();
$this->calendarEventTable = $sm->get('Website\Model\Database\CalendarEventTable');
}
return $this->calendarEventTable;
}

public function getCalendarPage($month, $year)
{
$calendarMonth = new CalendarMonth($month, $year);
$events = $this->getCalendarTable()->fetchBetween('2014-08-01', '2014-08-31');

$calendarMonth->initPage($events);

return $calendarMonth;
}
}

И вид: index.phtml

<?php
$form = $this->form;
$form->setAttribute('action', $this->url('calendar', array('action' => 'index')));
$form->prepare();

echo $this->form()->openTag($form);
echo $this->formHidden($form->get('month'));
echo $this->formHidden($form->get('year'));
echo $this->formSubmit($form->get('previous'));
echo $this->formSubmit($form->get('next'));

echo $this->form()->closeTag();
?>

0

Решение

Проблема в indexAction, вы не изменяете месяц и год, а вызываете getCalendarPage после if if так всегда выполняется. Вы можете изменить indexAction быть примерно таким:

public function indexAction()
{
$calendarMonth = null;
$form = new CalendarForm();
$request = $this->getRequest();

if ($request->isPost()) {
$form->setData($request->getPost());

$month = $form->get('month')->getValue();
$year = $form->get('year')->getValue();
if($this->getRequest()->getPost('next')) {
$month += 1;
if ($month > 12) {
$month = 1;
$year += 1;
}
} else if($this->getRequest()->getPost('previous')) {
$month -= 1;
if ($month < 1) {
$month = 12;
$year -= 1;
}
}
} else {
$month = 8;
$year = 2014;
}
$calendarMonth = $this->getCalendarPage($month, $year);

$form->get('month')->setValue($month);
$form->get('year')->setValue($year);

return new ViewModel(array(
'calendarMonth' => $calendarMonth,
'form' => $form,
));
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]