回答:
drupal_get_form()
フォームビルダーサービスに置き換えられました。例:
$form = \Drupal::formBuilder()->getForm(\Drupal\user\Form\UserLoginForm::class);
詳細については、変更レコードを参照してください。
実際には、しないでください-その変更レコードは間違っています。実際にクラス文字列を渡す必要がある場合、フォームIDを渡すように指示されます。
$variables['foo_form'] = \Drupal::formBuilder()->getForm('user_login');
?
フォームフォルダの下にフォームを作成できます。そして、どこからでもフォームを呼び出して、図のようにパラメーターを渡すことができます。
Drupal 7:$form = drupal_get_form('form_id',$parameter);
Drupal 8:$form = \Drupal::formBuilder()->getForm('Drupal\custom_module\Form\CustomModuleForm',$parameter);
フォームを返す(D8)またはレンダリングする(D7)には2つのオプションがあります。これらは\Drupal::formBuilder()->getForm
とDrupal::formBuilder()->buildForm
です。\Drupal::formBuilder()->getForm
以下のように使用します。
パラメータを渡さない場合はこれを使用します。
$form = \Drupal::formBuilder()->getForm('\Drupal\example\Form\ExampleForm');
return $form;
パラメーターを渡す場合は、これを使用します。
$parameter = "your_parameter";
$form = \Drupal::formBuilder()->getForm('\Drupal\example\Form\ExampleForm', $parameter);
return $form;
//pass to formbuild function
public function buildForm(array $form, FormStateInterface $form_state, $parameter = NULL){//form code}
$parameter = 'your_parameter';
$form = drupal_get_form('form_id', $parameter);
print drupal_render($form);
//pass to form function
function form_id ($form, &$form_state, $parameter){//form code}
乾杯。役立つかどうか教えてください。
ドキュメントでは、クラスのインスタンスも許可されています。そう
$formObj = new \Drupal\demo\Form\MyForm();
$form = \Drupal::formBuilder()->getForm($formObj);
正しいです。
以下がフォームクラスであると仮定します
namespace Drupal\demo\Form;
use \Drupal\Core\Form\FormBase;
class MyForm extends FormBase {
}
最初にフォームクラスから新しいインスタンスを作成し、formBuilderのgetFormに渡す必要があります。
$form_obj = new \Drupal\demo\Form\MyForm();
$form = \Drupal::formBuilder()->getForm($form_obj);
ここで他のすべてが失敗した場合は、新しいフォームステートオブジェクトを設定することによる巧妙なトリックです。
use Drupal\Core\Form\FormState;
...
$form_state = new FormState();
$form_state->set('name', $name);
$form_state->set('user', $user);
$render_array = \Drupal::formBuilder()->buildForm('\Drupal\mod\Form\MyForm', $form_state);
...
// Example render.
$response = new AjaxResponse();
// Show a dialog box.
$dialogText['#attached']['library'][] = 'core/drupal.dialog.ajax';
$response->addCommand(new OpenModalDialogCommand("Dialog Title", $render_array, ['width' => '300']));
return $response;
...次に、フォームメソッドbuildFormで次のことができます...
// Get form state.
$name = $form_state->get('name');
if (!empty($name)) {
$form['name'] = [
'#type' => 'item',
'#markup' => $name,
];
}