Come passo i parametri al form builder?


15

Ho i seguenti percorsi in module_name.routing.yml.

module_name.usergroup_delete:
  path: 'module_name/usergroup/delete/{arg1}'
  defaults:
    _form: '\Drupal\module_name\Form\DeleteUserGroup'
    _title: 'Delete User group'
  requirements:
    _permission: 'access admin menus'

Questo è il codice in module_name / src / Form / DeleteUserGroup.php.

namespace Drupal\module_name\Form;

use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;

class DeleteUserGroup extends ConfigFormBase {

  public function getFormId() {
    return 'delete_user_group';
  }
/**
 * General form for switching all nodes from one user to another.
 */
  public function buildForm(array $form, FormStateInterface $form_state,$product_code) {
  $form['_product'] = array(
        '#type' => 'value',
        '#value' => $product_code,);
//get the user group and username to display the confirmation message 
$result = db_query('select field_p_group_name_value from {content_type_usergroup} ctu'       
        . ' where vid=%d',$product_code);      
    while ($row = $result->fetchObject()) {
      $user_group = $row->field_p_group_name_value;
    }

return confirm_form($form,t('Are you sure you want to delete "' .$user_group. '" User Group?'),
        isset($_GET['destination']) ? $_GET['destination'] : "function_name",t('This action cannot be undone.'),t('Delete'),t('Cancel'));

  }
/**
 * #submit callback for node_adoption_transfer_form().
 */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $form_values = $form_state->getValues();
  //if ($form_state['values']['confirm']) {
    $param = $form_state->getValue('_product');
    drupal_set_message(t('Group ' .$param.' will get deleted.'));               
    db_query('DELETE FROM {content_type_usergroup} WHERE vid = %d', $param);
    //delete the users of the usergroup too
    db_query('DELETE FROM {usergroup_user_map} WHERE group_id=%d', $param);
    drupal_set_message(t('usergroup has been deleted.'));
    drupal_goto('function_name');
  }

  protected function getEditableConfigNames() {
    return "delete_user_group";
  }

}

Ricevo il seguente errore:

DeleteUserGroup :: buildForm () deve essere compatibile con Drupal \ Core \ Form \ FormInterface :: buildForm (array $ form, Drupal \ Core \ Form \ FormStateInterface $ form_state)

Perché?


Qualcuno può spiegare come questo equivale quando si utilizza il modulo WebForm? Non ho un modulo specifico per il modulo che ho creato usando il modulo, quindi quale sarebbe il punto '_form' all'interno del file routing.yml?
John Cogan,

Risposte:


28

Il parametro deve avere lo stesso nome in routing.yml e il metodo build. E quando si utilizzano i parametri nei moduli è necessario impostare un valore null nell'elenco dei parametri:

public function buildForm(array $form, FormStateInterface $form_state, $arg1 = NULL) {

Errore irreversibile irreversibile: l'argomento 2 passato a db_query () deve essere di tipo array, stringa fornita
Crazyrubixfan

quando sto cercando di usare arg1 in funzione
Crazyrubixfan,

1
OK, il problema di questa domanda con i parametri nei moduli è risolto. La chiamata di buildForm () ha avuto esito positivo. Si riscontra un nuovo problema con db_query (), che non accetta il parametro string dalla route.
4k4,

Sì grazie . Il problema è con db_query. Sto ottenendo il param ora
Crazyrubixfan

11

Innanzitutto creare un file routing.yml

admin_notes.form:
  path: '/example_module/form/{arg}'
  defaults:
    _form: '\Drupal\example_module\Form\ExampleForm'
  requirements:
    _permission: 'access content'

Quindi creare un file .php nella struttura di cartelle /src/Form/ExampleForm.php. Quindi compilare un modulo

public function buildForm(array $form, FormStateInterface $form_state,$arg = NULL) {

             $form['example_note'] = array(
            '#type' => 'textarea',
            '#title' => t('Block contents'),
            '#description' => t('This text will appear in the example block.'),
            '#default_value' => $arg,
        );
       $form['actions'] = ['#type' => 'actions'];
        $form['actions']['delete'] = array(
            '#type' => 'submit',
            '#value' => $this->t('Delete'),
        );

return $form;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.