আপনি কীভাবে হুক_ফর্ম_ল্টার () এ একটি কাস্টম জমা হ্যান্ডলারটি প্রয়োগ করবেন?


15

আমি আমার ড্রুপাল 7 মডিউলগুলির মধ্যে একটিতে 8 এ আপডেট করছি এবং আমার ফর্মটি পরিবর্তনের সাথে সমস্যা হচ্ছে। আমি একটি বৈধতা ফাংশন এবং একটি জমা হ্যান্ডলার যুক্ত করছি। বৈধতা ফাংশনটি ঠিক সূক্ষ্ম হিসাবে ডাকা হচ্ছে, তবে জমা ফাংশনটি বরখাস্ত হচ্ছে না। আমি ভাবছি যদি এর অর্থ একটি সিম্ফনি-স্টাইলের পদ্ধতি রয়েছে যা বিদ্যমান ফর্মগুলিতে হ্যান্ডলারের জমা দেওয়ার ক্ষেত্রে নেওয়া দরকার taken আমি অনেক অনুসন্ধান করেছি এবং এর কোন উদাহরণ পাই না। কিছু কার্য-অগ্রগতি ডি 8 মডিউলগুলির মধ্য দিয়েও দেখেছি তবে আমি সেখানে সত্যিই কোনও কার্যকারী উদাহরণ খুঁজে পাইনি।

কারও কি ধারণা আছে সঠিক ড্রুপাল 8 উপায় এটি করার কি?


2
আপনার নিজের বিদ্যমান কোডটি পোস্ট করা উচিত যাতে লোকেরা এটি দেখে এবং যেকোন সমস্যা সমাধান করতে পারে / বিকল্প প্রস্তাব করতে পারে।
ইউরি বাবেঙ্কো

ডি 8 বিটা 9 অনুসারে হ্যান্ডলারের জমা দেওয়ার জন্য গেটারস এবং সেটটার রয়েছে, তবে আমি তাদের কাজ করে নিলাম এবং নীচের উত্তরটি ব্যবহার করলাম বলে মনে হচ্ছিল না। আমি আশা করব নোড ইন্টারফেস ভবিষ্যতে কিছু ইভেন্ট প্রেরণ করেছে, আমি হুক ব্যবহার না করে বরং কোনও ইভেন্টের সদস্যতা নেব।
অ্যালেক্স ফিননার্ন

উত্তর:


13

ডকুমেন্টেশনের উদাহরণ অনুসারে এটি দ্রুপাল for এর মতোই:

$form['actions']['submit']['#submit'][] = 'mymodule_upload_enabled_types_submit';

আপনি অনুরূপ (কাজ) যুক্তি খুঁজে পেতে পারেন

এবং এর বাইরে আরও কয়েকজন।


1
আমি এপিআই ডক্স নিয়ে তর্ক করতে পারি না। সম্ভবত আমার বাস্তবায়নের সাথে জটিল কিছু, আমি আরও গভীর খনন করব।
আরবি

উপরে আমার আপডেটটি দেখুন, $ ফর্ম ['ক্রিয়াগুলি'] ['জমা দিন'] এর বাইরেও রয়েছে $ ফর্ম ['ক্রিয়া'] ['প্রকাশ'] এবং ['অপ্রকাশিত'] বিভাগ যা হ্যান্ডলারের সাথে সংযুক্ত থাকতে পারে।
আরবি

আমার জমা হ্যান্ডলারের জন্য আমাকে $ ফর্ম ['ক্রিয়া'] ['প্রকাশ'] ['# সাবমিট'] [] পরিবর্তে $ ফর্ম ['ক্রিয়া'] ['সাবমিট'] ['# সাবমিট'] [] ব্যবহার করতে হয়েছিল নোড প্রকাশিত হয় যখন কাজ। যাইহোক, নোড প্রথম অপ্রকাশিত হিসাবে সংরক্ষণ করা হলে আমি কলব্যাকটি কাজ করতে পারি বলে মনে হয় না।
অ্যালেক্স ফিননার্ন

6

নীচের কোডটি ব্যবহার করে আপনি কতজন জমা দেওয়ার হ্যান্ডেলারটি যুক্ত করতে পারেন:

 $form['actions']['submit']['#submit'][] = 'mymodule_what_ever_function';

যদি আপনি ডিফল্ট সাবমিট হ্যান্ডলার, (একটি জমা দেওয়ার হ্যান্ডলার যা জমা কলব্যাকের পরে ডাকা হবে) পরে একটি জমা হ্যান্ডলার যুক্ত করতে চান , আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন।

$form['#submit'][1] = test_function;

জমা হ্যান্ডলারটি সরাতে:

unset($form["actions"]['submit']);

3

আচরণ হয় হয় পরিবর্তিত হয় বা কেস কেস পৃথক। নোডের সাথে একাধিক নিশ্চিতকরণ ফর্ম মুছুন

$form['actions']['submit']['#submit'][] = 'mymodule_upload_enabled_types_submit';

@ ক্লাইভের কোড দ্রুপালকে প্রধান হ্যান্ডলারটিকে উপেক্ষা করার কারণ দেয়। এই ক্ষেত্রে $form['#submit']বিভাগটিতে হ্যান্ডলারটি যুক্ত করুন :

$form['#submit'][] = 'mymodule_upload_enabled_types_submit';

1

ড্রুপাল 8-এ নিবন্ধ নোড অ্যাড / সম্পাদনা ফর্মটিতে একটি কাস্টম জমা হ্যান্ডলারটি কীভাবে সংযুক্ত করা যায় তা এখানে:

<?php

use Drupal\Core\Form\FormStateInterface;

/**
 * Implements hook_form_alter().
 */
function my_module_form_alter(&$form, FormStateInterface $form_state, $form_id) {

  // Use this to reveal the form id.
  //drupal_set_message($form_id);

  // Use this with the devel module to inspect the button action(s).
  //kint($form['actions']);

  switch ($form_id) {

    case 'node_article_form':      // New article nodes.
    case 'node_article_edit_form': // Existing article nodes.

      // Attach our custom submit handler.
      $form['actions']['publish']['#submit'][] = 'my_module_node_article_form_submit';
      break;

  }

}

function my_module_node_article_form_submit($form, FormStateInterface $form_state) {
  drupal_set_message('Running custom submit handler...');
}

আমি কাস্টম সাবমিট হ্যান্ডলারটিতে সফলভাবে সংযোজন করতে সক্ষম হইনি $form['#submit']এবং সঠিকভাবে ফাংশনটি ফায়ার করতে পারি। আমি ছিল স্পষ্টভাবে তা সংযুক্ত করতে সংরক্ষণ এবং প্রকাশ করুন যখন একটি নতুন নিবন্ধ তৈরি বোতাম, এবং এটিকে সংযুক্ত সংরক্ষণ ও প্রকাশ রাখা বোতাম যখন একটি বিদ্যমান নিবন্ধ সম্পাদনা।

এছাড়াও publish, এখানে কয়েকটি বোতামের ক্রিয়া উপলভ্য রয়েছে:

unpublish
preview
delete

আমি ড্রুপাল ৮.7.৩ এ আছি এবং my_module_node_article_form_submit($form, FormStateInterface $form_stateআমাকে দিয়েছি TypeError: Argument 2 passed to _ccad_content_log_webform_submit() must be an instance of FormStateInterface, instance of Drupal\Core\Form\FormState given; _submit($form, $form_state)ত্রুটিগুলি স্থির করে এটিকে পরিবর্তন করা ।
ব্যবহারকারী 1359
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.