Як змінити дію та метод форми
Дата оновлення перекладу 2023-06-14
Як змінити дію та метод форми
За замовчуванням, форма буде відправлена через запит HTTP POST по тому ж URL, за яким вона була відображена. Іноді вам потрібно буде змінювати ці параметри. Ви можете зробити це декількома різними способами.
Якщо ви використовуєте FormBuilder, щоб побудувати
вашу форму, ви можете використати setAction()
і setMethod()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
// src/Controller/DefaultController.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
class DefaultController extends Controller
{
public function new()
{
$form = $this->createFormBuilder($task)
->setAction($this->generateUrl('target_route'))
->setMethod('GET')
->add('task', TextType::class)
->add('dueDate', DateType::class)
->add('save', SubmitType::class)
->getForm();
// ...
}
}
Note
Цей приклад передбачає, що ви створили маршрут під назвою target_route
, який
вказує на контролер, що обробляє форму.
При використанні класу типу форми, ви можете передати дію та метод в якості опцій форми:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
// src/Controller/DefaultController.php
namespace App\Controller;
use App\Form\TaskType;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class DefaultController extends Controller
{
public function new()
{
// ...
$form = $this->createForm(TaskType::class, $task, array(
'action' => $this->generateUrl('target_route'),
'method' => 'GET',
));
// ...
}
}
Нарешті, ви можете перевизначити дію та метод у шаблоні, передавши їх у функції
помічника form_start()
або form()
:
1 2
{# templates/default/new.html.twig #}
{{ form_start(form, {'action': path('target_route'), 'method': 'GET'}) }}
Note
Якщо метод форми не GET або POST, а PUT, PATCH або DELETE, Symfony вставить сховане
поле з іменем _method
, яке зберігає цей метод. Форма буде відправлена у нормальному
запиті POST, але маршрутизатор Symfony може визначти параметр _method
та інтепретувати
його як запит PUT, PATCH або DELETE. Дивіться опцію .