53 lines
1.7 KiB
PHP
53 lines
1.7 KiB
PHP
<?php
|
||
/**
|
||
* @package Bicycle
|
||
* @author Egor Isaev
|
||
* @description FeedbackController.php
|
||
* @copyright (c) 23/06/2026
|
||
*/
|
||
|
||
namespace App\Controller;
|
||
|
||
use System\Classes\Controller;
|
||
use System\Classes\Request;
|
||
use System\Classes\Validation;
|
||
use System\Classes\HTTP\Request as HTTPRequest;
|
||
|
||
/**
|
||
* Демонстрация формы с валидацией.
|
||
* CSRF проверяется автоматически в Controller::before().
|
||
* Один экшен и показывает форму (GET), и обрабатывает её (POST).
|
||
*/
|
||
class FeedbackController extends Controller
|
||
{
|
||
/**
|
||
* @return string
|
||
* @throws \System\Classes\MyException
|
||
*/
|
||
public function indexAction(): string
|
||
{
|
||
$request = Request::$current;
|
||
$errors = [];
|
||
|
||
if ($request->method() === HTTPRequest::POST) {
|
||
// CSRF уже проверен в BaseController::before(). Здесь — только данные.
|
||
$validation = Validation::factory($request->post())
|
||
->label('email', 'E-mail')
|
||
->label('message', 'Сообщение')
|
||
->rule('email', 'required')
|
||
->rule('email', 'email')
|
||
->rule('message', 'required')
|
||
->rule('message', 'min_length', [10]);
|
||
|
||
if ($validation->check()) {
|
||
// Данные чистые — здесь было бы сохранение/отправка письма.
|
||
return $this->render('feedback_ok', ['email' => $request->post('email')]);
|
||
}
|
||
|
||
$errors = $validation->errors();
|
||
}
|
||
|
||
return $this->render('feedback', ['errors' => $errors]);
|
||
}
|
||
}
|