Webフォームをモーダルで表示しようとしています(モーダル内のエラー/検証メッセージを含む)。私はこれに従っています カスタムのアプローチdrupal form これはWebフォームではありません。これがWebフォームでまったく可能かどうか、そしてそれが可能な場合、実行するために考慮する必要がありますか?
私が持っている最初の問題は、例のTeacherContactController.php
からの次のコード行です
$modal_form = $this->formBuilder->getForm('Drupal\tl_session\Form\TeacherForm');
これを自分のコントローラーで使用しようとすると、Webフォームの適切な名前空間+ IDを取得できません。私がdevelで私のウェブフォームをチェックすると、それは言う:
[__CLASS__] => Drupal\webform\Entity\Webform
[id] => add_news_webform
しかし、「フォーム引数Drupal\webform\Entity\Webform\webform-submission-add_news_webform-form is not a valid form」エラーが発生します。多くのことを試しましたが、成功しませんでした。
どのようにしてformBuilderでwebformを取得できますか(webform固有のajax設定などのように)他に何が不足していますか?
思ったよりずっとシンプル
次の方法でリンクを作成できるよりも、WebフォームにURL /contact
があるとしましょう
<a class="use-ajax" data-dialog-type="modal" href="/contact>Contact US</a>
そのリンクを押すと、フォームがモーダルで開かれ、モーダル内にエラー検証とメッセージが表示されます
私の場合、hook_preprocess_page
ファイルに次の.theme
も追加する必要がありました
function THEMENAME_preprocess_page(&$vars) {
//custom logic of when to include the library
// ....
$vars['#attached']['library'][] = 'core/drupal.dialog.ajax';
}
一部の人々はこれは必要ないと報告しましたが、他のいくつかのモジュールがこのライブラリを含んでいると思います...
最終的に私のために機能したformBuilderでWebフォームをロードする唯一の解決策は、Webフォームを埋め込む方法の次の documentation に基づいています。これが私のコードです:
/**
* Callback for opening the modal form to create an article.
*
* @return Drupal\Core\Ajax\AjaxResponse
* A responseObject for Ajax.
*/
public function addArticle() {
// Get the currently logged in user account.
$user = $this->currentUser();
if ($user->hasPermission('create article content')) {
$response = new AjaxResponse();
// Load the webform as indicated here:
// https://www.drupal.org/docs/8/modules/webform/webform-cookbook/how-to-embed-a-webform
$output['add_form'] = [
'#type' => 'webform',
'#webform' => 'add_news_webform',
];
// Add a modal dialog command to the $response object.
$response->addCommand(new OpenModalDialogCommand(t('Create Article'), $output, ['width' => '500']));
return $response;
}
}