$ Form_state কী জন্য ব্যবহৃত হয়?


33

কি $form_stateসাধারণত যদি এটা একটি আর্গুমেন্ট হিসাবে ব্যবহার করা হয় ফরম API- এর প্রেক্ষাপটে জন্য ব্যবহৃত?

বিশেষত, আমি কখন এটি ব্যবহার করা হয় তার একটি উদাহরণ খুঁজছি।

উত্তর:


48

$form_stateএকটি ফর্ম জমা হ্যান্ডলার বা একটি ফর্ম বৈধকরণ হ্যান্ডলারকে দেওয়া আর্গুমেন্টগুলির মধ্যে একটি; এর প্রধান ব্যবহারটি হ'ল ফর্মের ব্যবহারকারীর থেকে প্রবেশ করা মানগুলি পুনরুদ্ধার করা বিষয়বস্তু দেখুন $form_state['values']) তবে এতে অন্যান্য মান রয়েছে যা অন্যান্য উদ্দেশ্যে ব্যবহৃত হতে পারে। ড্রুপাল_বিল্ড_ফর্ম () এর
জন্য ডকুমেন্টেশনটিতে সেই অ্যারেতে থাকা অন্যান্য মানগুলির তালিকা রয়েছে, যার মধ্যে নিম্নলিখিতগুলি রয়েছে:

  • পুনর্নির্মাণ: সাধারণত, সম্পূর্ণ ফর্ম প্রসেসিং শেষ হওয়ার পরে এবং হ্যান্ডলারগুলি জমা দেওয়ার পরে, একটি ফর্ম সম্পন্ন বলে মনে করা হয় এবং drupal_redirect_form () GET অনুরোধ ব্যবহার করে ব্যবহারকারীকে একটি নতুন পৃষ্ঠায় পুনঃনির্দেশ করবে (তাই ব্রাউজার রিফ্রেশ পুনরায় জমা দেয় না ফর্ম)। তবে, 'পুনর্নির্মাণ' সত্যে সেট করা থাকলে, ফর্মটির একটি নতুন অনুলিপি সঙ্গে সঙ্গে পুনর্নির্দেশের পরিবর্তে ব্রাউজারে তৈরি এবং প্রেরণ করা হবে। এটি বহু-পদক্ষেপের ফর্মগুলির জন্য যেমন উইজার্ড এবং নিশ্চিতকরণ ফর্মগুলির জন্য ব্যবহৃত হয়। সাধারণত, $form_state['rebuild']একটি জমা হ্যান্ডলার দ্বারা সেট করা হয়, যেহেতু এটি একটি জমা হ্যান্ডলারের মধ্যে সাধারণত যুক্তিযুক্ত যা ফর্মটি সম্পন্ন হয়েছে বা অন্য পদক্ষেপের প্রয়োজন তা নির্ধারণ করে। তবে, কোনও বৈধতা হ্যান্ডলার ইতিমধ্যে $form_state['rebuild']কোনও বৈধতা ত্রুটি না থাকলেও, ফর্ম প্রসেসিংকে হ্যান্ডলারগুলি জমা দেওয়ার পরিবর্তে ফর্মটি পুনর্নির্মাণের কারণ হিসাবে সেট করতে পারে।
  • পুনঃনির্দেশ: জমা দেওয়ার সময় ফর্মটি পুনর্নির্দেশ করতে ব্যবহৃত হয়। এটি হয় গন্তব্য URL সহ একটি স্ট্রিং বা যুক্তিগুলির সাথে সামঞ্জস্যপূর্ণ অ্যারে drupal_goto()drupal_redirect_form()সম্পূর্ণ তথ্যের জন্য দেখুন ।
  • ক্যাশে: যদি TRUEঅরিজিনাল সেট করা থাকে তবে আনপ্রসেসড ফর্ম কাঠামোটি ক্যাশে করা হবে, যা পুরো ফর্মটি ক্যাশে থেকে পুনর্নির্মাণের অনুমতি দেয়। একটি সাধারণ ফর্ম ওয়ার্কফ্লোতে দুটি পৃষ্ঠার অনুরোধ জড়িত; প্রথমে একটি ফর্ম তৈরি করা হয় এবং ব্যবহারকারীর পূরণের জন্য রেন্ডার করা হয় Then ডিফল্টরূপে $formএবং $form_stateএই পৃষ্ঠাগুলির প্রতিটি অনুরোধের সময় স্ক্র্যাচ থেকে নির্মিত are প্রায়শই, প্রাথমিক পৃষ্ঠার অনুরোধ থেকে জমা দেওয়ার প্রক্রিয়া করার অনুরোধটি থেকে চলকগুলি $formএবং $form_stateভেরিয়েবলগুলি বজায় রাখা প্রয়োজনীয় বা পছন্দসই । এটি করার জন্য 'ক্যাশে' সত্যে সেট করা যেতে পারে। একটি বিশিষ্ট উদাহরণ একটি Ajax- সক্ষম ফর্ম, যাajax_process_form()সমস্ত ফর্মের জন্য ফর্ম ক্যাচিং সক্ষম করে যা # জ্যাক্স সম্পত্তি সহ কোনও উপাদান অন্তর্ভুক্ত করে। (আজাক্স হ্যান্ডলারের ফর্মটি নিজেই তৈরি করার কোনও উপায় নেই, সুতরাং ক্যাশেড সংস্করণে নির্ভর করতে হবে)) নোট করুন নির্বিশেষে 'পুনর্নির্মাণ' পতাকা সেট থাকা (বহু-পদক্ষেপ) ফর্মগুলির জন্য অটল হয়ে $form$form_stateস্বয়ংক্রিয়ভাবে ঘটে বলে মনে করুন for 'ক্যাশে'।
  • সঞ্চয়স্থান: $form_state['storage']কোনও বিশেষ কী নয় এবং ফর্ম এপিআইতে এর জন্য কোনও নির্দিষ্ট সমর্থন সরবরাহ করা হয় না। Traditionতিহ্য অনুসারে এটি সেই অবস্থান যেখানে অ্যাপ্লিকেশন-নির্দিষ্ট ডেটা জমা, বৈধকরণ এবং ফর্ম বিল্ডার ফাংশনগুলির মধ্যে যোগাযোগের জন্য বিশেষত একটি মাল্টি-স্টেপ-স্টাইলে ফর্ম সংরক্ষণ করা হয়েছিল। ফর্ম বাস্তবায়নগুলি $form_stateএই ধরণের স্টোরেজের জন্য (এখানে তালিকাভুক্ত কীগুলি এবং ফর্ম এপিআই অভ্যন্তরীণ দ্বারা ব্যবহৃত অন্যান্য সংরক্ষিত চাওয়া ব্যতীত ) মধ্যে যে কোনও কী (গুলি) ব্যবহার করতে পারে । নির্বাচিত কীটি ফর্ম এপিআই বা অন্যান্য মডিউলগুলির দ্বারা ব্যবহৃত বিরোধীদের সাথে দ্বন্দ্ব না করে তা নিশ্চিত করার প্রস্তাবিত উপায়টি কী নামটির জন্য মডিউলটির নাম বা একটি উপসর্গ হিসাবে ব্যবহার করা। উদাহরণস্বরূপ, নোড মডিউল ব্যবহার করে$form_state['node'] নোড সম্পাদনা হচ্ছে সম্পর্কিত তথ্য সংরক্ষণ করার জন্য নোড সম্পাদনা ফর্মগুলিতে এবং এই তথ্যটি "প্রাকদর্শন" বোতামের ক্রমাগত ক্লিকগুলিতে পাশাপাশি "সংরক্ষণ করুন" বোতামটি ক্লিক করার পরে উপলব্ধ থাকে।

$form_stateযুক্তি হিসাবে অন্যান্য ফাংশনগুলি হুক হুক_ফর্ম_ল্টার () এবং হুক_ফর্ম_এফএআরএম_আইডি_এল্টার ()

এই আর্গুমেন্টটি ব্যবহার করে এমন কোডের উদাহরণ হিসাবে আপনি নীচের কোডটি ধারণ করে মন্তব্য_ফর্ম_সাম্বিট () দেখতে পারেন :

function comment_form_submit($form, &$form_state) {
  $node = node_load($form_state['values']['nid']);
  $comment = comment_form_submit_build_comment($form, $form_state);
  if (user_access('post comments') && (user_access('administer comments') || $node->comment == COMMENT_NODE_OPEN)) {
    // Save the anonymous user information to a cookie for reuse.
    if (user_is_anonymous()) {
      user_cookie_save(array_intersect_key($form_state['values'], array_flip(array('name', 'mail', 'homepage'))));
    }

    comment_save($comment);
    $form_state['values']['cid'] = $comment->cid;

    // Add an entry to the watchdog log.
    watchdog('content', 'Comment posted: %subject.', array('%subject' => $comment->subject), WATCHDOG_NOTICE, l(t('view'), 'comment/' . $comment->cid, array('fragment' => 'comment-' . $comment->cid)));

    // Explain the approval queue if necessary.
    if ($comment->status == COMMENT_NOT_PUBLISHED) {
      if (!user_access('administer comments')) {
        drupal_set_message(t('Your comment has been queued for review by site administrators and will be published after approval.'));
      }
    }
    else {
      drupal_set_message(t('Your comment has been posted.'));
    }
    $query = array();
    // Find the current display page for this comment.
    $page = comment_get_display_page($comment->cid, $node->type);
    if ($page > 0) {
      $query['page'] = $page;
    }
    // Redirect to the newly posted comment.
    $redirect = array('node/' . $node->nid, array(
        'query' => $query,
        'fragment' => 'comment-' . $comment->cid,
      ));
  }
  else {
    watchdog('content', 'Comment: unauthorized comment submitted or comment submitted to a closed post %subject.', array('%subject' => $comment->subject), WATCHDOG_WARNING);
    drupal_set_message(t('Comment: unauthorized comment submitted or comment submitted to a closed post %subject.', array('%subject' => $comment->subject)), 'error');
    // Redirect the user to the node they are commenting on.
    $redirect = 'node/' . $node->nid;
  }
  $form_state['redirect'] = $redirect;
  // Clear the block and page caches so that anonymous users see the comment
  // they have posted.
  cache_clear_all();
}

বোঝার জন্য কি $form_state['values']রয়েছে, আপনি মান যোগ করা তাকান প্রয়োজন $formমধ্যে () comment_form । উদাহরণস্বরূপ, $form_stateরয়েছে $form_state['values']['name']কারণগুলি $formরয়েছে $form['author']['name']। সাধারণত, যদি $form['field']কোনও ফর্ম ক্ষেত্র হয়, তবে এটি $form_stateথাকবে $form_state['values']['field']


যদি আমরা ফর্মের মানগুলি পরিবর্তন করতে বা হুক_ফর্ম_াল্টার ব্যবহার করে মাল্টিভ্যু ফিল্ড বোতামগুলি অক্ষম করতে চাই, তবে কোন ভেরিয়েবলটি $ ফর্ম বা $ থেকে_স্টেটে পরিবর্তন করা উচিত? $ Form_state বিশেষভাবে এজ্যাক্সের জন্য ব্যবহৃত হয়?
২৮

1
@ কিরণিং সাধারণত, একটি এজেএক্স কলব্যাক $formঅ্যারের একটি অংশ ফেরত দেয় ; এটি ফর্ম নির্মাতা যা এর বিষয়বস্তু পরীক্ষা করে $form_state। এটিই আমি দেখেছি সমস্ত অ্যাজেএক্স কলব্যাকগুলি মডিউলগুলির দ্বারা প্রয়োগ করা হয়েছে যা সঠিক কাজ করে।
কিমলালুনো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.