Пользователь сайта обычно работает с формой в следующем порядке:
Как правило, эти две веб-страницы обрабатываются одним и тем же действием контроллера.
В примере ниже мы покажем, как создать действие контроллера для отображения формы обратной связи (feedback form) и извлечения данных, отправленных пользователем. Для начала добавьте шаблон представления contact-us.phtml в каталог application/index/ под каталогом модуля view/ (см. рисунок 7.6).
Поместите код HTML-разметки формы обратной связи из предыдущего раздела в файл шаблона представления.
Затем добавьте метод действия contactUsAction()
в класс IndexController
. В этом методе
мы хотим извлечь необработанные данные из формы обратной связи, отправленной пользователем.
<?php
namespace Application\Controller;
// ...
class IndexController extends AbstractActionController
{
// Это действие отображает форму обратной связи
public function contactUsAction()
{
// Проверяем, отправил ли пользователь форму
if($this->getRequest()->isPost()) {
// Извлекаем данные формы из переменных POST
$data = $this->params()->fromPost();
// ... Какие-то действия с данными ...
var_dump($data);
}
// Передаем переменную формы представлению
return new ViewModel([
'form' => $form
]);
}
}
В этом фрагменте мы определяем метод действия contactUsAction()
в классе
IndexController
(строка 9).
Затем в строке 12 мы проверяем, является ли запрос POST-запросом (проверяем первую строку HTTP-запроса). Как правило, формы используют метод POST для отправки данных формы. Поэтому мы можем выявить, отправлена форма или нет, проверив первую строку HTTP-запроса.
<?php
return [
// ...
'router' => [
'routes' => [
// Add the following routing rule for the "Contact Us" page
'contactus' => [
'type' => Literal::class,
'options' => [
'route' => '/contactus',
'defaults' => [
'controller' => Controller\IndexController::class,
'action' => 'contactUs',
],
],
],
],
],
// ...
];
Теперь, набрав URL "http://localhost/contactus" в адресной строке браузера, вы должны будете увидеть страницу как на рисунке 7.7.
Введите e-mail, тему и основной текст и нажмите кнопку отправки формы.
Данные будут отправлены серверу, а затем извлечены методом IndexController::contactUsAction()
.
Ниже показан пример массива $data
(выведенный на веб-страницу с помощью функции PHP var_dump()
). Как видите,
массив содержит ключ для каждого поля формы, включая поле "submit".
array (size=4)
'email' => string 'name@example.com' (length=16)
'subject' => string 'С Новым Годом!' (length=15)
'body' => string 'Уважаемая служба поддержки, я хотел бы поблагодарить вас
за превосходное качество ваших услуг и поздравить вас
с Новым Годом!' (length=118)
'submit' => string 'Submit' (length=6)