Ответ 1
Вы можете использовать, например,
$request = $this->get('request');
if ($request->request->has('delete'))
{
...
}
Итак, у меня есть таблица с флажком в каждой строке, например:
<form name="" action={{ path('mypath') }}" method="post">
<button name="print">Print</button>
<button name="delete">Delete</button>
<table>
{% for client in clienti %}
<tr>
<td><input type="checkbox" name="action[]" value="{{ client.id }}" /></td>
</tr>
.
.
.
{% endfor %}
</table>
</form>
Теперь, в моем контроллере, я хочу проверить, какая кнопка была нажата. Как это сделать?
В моих других формах, генерируемых symfony, легко, потому что у меня есть объект формы и очень полезный метод:
if ($form->get('delete')->isClicked()) {
// delete ...
}
Я хочу знать правильный метод для этого.
Спасибо.
Вы можете использовать, например,
$request = $this->get('request');
if ($request->request->has('delete'))
{
...
}
С Symfony 2.3 вы можете сделать:
Форма:
$form = $this->createFormBuilder($task)
->add('name', 'text')
->add('save', 'submit')
->add('save_and_add', 'submit')
->getForm();
контроллер:
if ($form->isValid()) {
// ... do something
// the save_and_add button was clicked
if ($form->get('save_and_add')->isClicked()) {
// probably redirect to the add page again
}
// redirect to the show page for the just submitted item
}
см. здесь: http://symfony.com/blog/new-in-symfony-2-3-buttons-support-in-forms
Просто создайте кнопки в построителе форм, визуализируйте их в представлении и используйте тот же метод, который вы уже использовали в других формах:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('delete', 'button')
->add('print', 'button')
}
На ваш взгляд:
<form name="" action="{{ path('mypath') }}" method="post">
{{ form_widget(form.print) }}
{{ form_widget(form.delete) }}
...
</form>
Обновление для Symfony3:
use Symfony\Component\HttpFoundation\Request;
public function myAction(Request $request)
{
if ($request->query->has('delete')) // For GET form
{
// ...
}
if ($request->request->get('delete')) // For POST form
{
// ...
}
}