bugfix> drupal8 > 投稿

ユーザーが分類用語にフラグを立てたときに、ユーザーをビューにリダイレクトしたいと思います。

この質問は、ルールを使用してフラグの保存時にリダイレクトする方法についてです。 これをプログラムで実行したいと思います。

使ってみました hook_form_alter() リダイレクトを使用して送信ハンドラーを追加します。残念ながら、フラグには編集フォームがあり、 hook_form_alter() (( MYMODULE_form_flagging_FLAGTYPE_edit_form_alter() )、それらは「作成」フォームを持っていないようです。

では、フラグを立てたときにプログラムでリダイレクトを追加するにはどうすればよいですか?

編集

私が見た4k4のコメントに基づいて /flag/srs/Entity/Flagging.php

*    "form" = {
 *      "add" = "Drupal\flag\Form\FlaggingForm",
 *      "edit" = "Drupal\flag\Form\FlaggingForm",
 *      "delete" = "Drupal\flag\Form\UnflagConfirmForm"

しかし、私がやろうとしたとき hook_form_alter() と:

  • function MYMODULE_form_flagging_FLAGGINGTYPE_add_form_alter(&$form, FormStateInterface $form_state, $form_id)
  • function MYMODULE_form_flagging_add_form_alter(&$form, FormStateInterface $form_state, $form_id)

コードを取得することもできませんでした(キャッシュを再構築しました)。

回答 2 件
  • ターゲットエンティティフォームに別のアプローチをとることができます。

    use Drupal\Core\Form\FormStateInterface;
    use Drupal\Core\Entity\ContentEntityFormInterface;
    
    /**
     * Implements hook_form_alter().
     */
    function mymodule_form_alter(array &$form, FormStateInterface $form_state) {
      $form_object = $form_state->getFormObject();
      if (!($form_object instanceof ContentEntityFormInterface)) {
        return;
      }
      $entity = $form_object->getEntity();
      if (!(entity instanceof FooEntityInterface)) {
        return;
      }
      if (!$entity->isNew()) {
        return;
      }
      if ($entity->bundle() !== 'bar') {
        return;
      }
      // alter form
    }
    
    

  • これはで行うことができます hook_entity_presave()

    function MYMODULE_flagging_presave(FlaggingInterface $flagging) {
      switch ($flagging->getFlagId()) {
        case 'FLAGTYPE':
          $redirect_url = Url::fromRoute('view.VIEW_MACHINE_NAME.VIEW_DISPLAY_ID')->toString();
          $response = new RedirectResponse($redirect_url);
          $response->send();
         break;
       }
     }
    
    

あなたの答え