There is now an abstract base class, ConfirmFormBase, that implements FormInterface with specific methods that represent the parameters used by confirm_form().
The confirm_form() function has thus been removed.
Read more about FormInterface here: https://www.drupal.org/node/1932058
You can see a list of forms implementing ConfirmFormBase in core here: https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21Co...
Drupal 7
function mymodule_delete_form($form, &$form_state, $id) {
$form_state['mymodule_id'] = $id;
return confirm_form($form,
t('Do you want to delete %id?', array('%id' => $id)),
'admin/config/mymodule',
t('Only do this if you are sure!'),
t('Delete it!'),
t('Nevermind')
);
}
function mymodule_delete_form_submit($form, &$form_state) {
mymodule_delete($form_state['delete']);
}
Drupal 8
namespace Drupal\my_module\Form;
use Drupal\Core\Form\ConfirmFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
/**
* Defines a confirmation form for deleting mymodule data.
*/
class MymoduleDeleteForm extends ConfirmFormBase {
/**
* The ID of the item to delete.
*
* @var string
*/
protected $id;
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'my_module_delete';
}
/**
* {@inheritdoc}
*/
public function getQuestion() {
return t('Do you want to delete %id?', array('%id' => $this->id));
}
/**
* {@inheritdoc}
*/
public function getCancelUrl() {
return new Url('my_module.myroute');
}
/**
* {@inheritdoc}
*/
public function getDescription() {
return t('Only do this if you are sure!');
}
/**
* {@inheritdoc}
*/
public function getConfirmText() {
return t('Delete it!');
}
/**
* {@inheritdoc}
*/
public function getCancelText() {
return t('Nevermind');
}
/**
* {@inheritdoc}
*
* @param int $id
* (optional) The ID of the item to be deleted.
*/
public function buildForm(array $form, FormStateInterface $form_state, $id = NULL) {
$this->id = $id;
return parent::buildForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
mymodule_delete($this->id);
}
}
If you are implementing a confirm form for an entity using _entity_form this is even easier.
Drupal\Core\Entity\EntityConfirmFormBase
will store the entity in a property called entity
. Which means you only have to do something like this:
namespace Drupal\mymodule;
use Drupal\Core\Entity\EntityConfirmFormBase;
class MyEntityDeleteForm extends EntityConfirmFormBase {
/**
* {@inheritdoc}
*/
public function getQuestion() {
return t('Are you sure you want to delete myentity %myentity?', array('%myentity' => $this->entity->label()));
}
/**
* {@inheritdoc}
*/
public function getConfirmText() {
return t('Delete');
}
/**
* {@inheritdoc}
*/
public function getCancelRoute() {
return array(
'route_name' => 'myentity.admin',
);
}
/**
* {@inheritdoc}
*/
public function submit(array $form, array &$form_state) {
$this->entity->delete();
}
}
Comments
method signatures are out of date
buildForm and submitForm signatures are out of date and need to match FormInterface. Also missing the getFormId() function.