আমি কীভাবে একটি ফর্ম রেন্ডার করব?


20

এর বিকল্প কী drupal_get_form('user_login')? দ্রুপাল 8 এ?

আমি থিম_নাম.থমে নীচের কোডটি ব্যবহার করছি, তবে এটি কার্যকর হয় না।

// Include namespace for userLoginForm.
use \Drupal\Core\core\modules\user\src\Form;

function MYTHEMENAME_preprocess_page(&$variables) {
  $form = UserLoginForm::create();
} 

উত্তর:


33

drupal_get_form() ফর্ম নির্মাতা পরিষেবা দ্বারা প্রতিস্থাপন করা হয়েছে, যেমন:

$form = \Drupal::formBuilder()->getForm(\Drupal\user\Form\UserLoginForm::class);

দেখুন রেকর্ড পরিবর্তন করুন আরো বিস্তারিত জানার জন্য।

আসলে, করবেন না - যে পরিবর্তন রেকর্ডটি ভুল। এটি আপনাকে ফর্ম আইডি পাস করতে বলবে, যখন বাস্তবে আপনাকে শ্রেণিক স্ট্রিং পাস করতে হবে।


আপনার জবাবের জন্য ধন্যবাদ তবে আপনার লেখার সাথে সাথে আমি এটি ইতিমধ্যে ব্যবহার করেছি এবং আমি বিল্ডার গঠনে drupal_get_form পরিবর্তনটি জানি তবে আমি কীভাবে এটি আমার থিম প্রিপ্রোসেস হুকটিতে ব্যবহার করতে পারি তা জানতে চাই।
কামাল ওবেরয়

1
আমি নিশ্চিত না আপনি কী বোঝাতে চেয়েছেন, তা না $variables['foo_form'] = \Drupal::formBuilder()->getForm('user_login');হলে?
ক্লাইভ

2
আর্গুমেন্টটি একটি শ্রেণি, ফর্ম_আইডি নয়। ইউজারলগিনফর্ম :: শ্রেণীর মতো কিছু।
বার্ডির

1
আমি আপনাকে পিএইচপি 5.5 ব্যবহার করুন: ক্লাস। এটি অনেক সহজ (কাজগুলি ব্যবহার করে) এবং বিরক্তিকর
টাইপগুলি

1
অনুমানযুক্ত বিষয় @ কমল ওবেরাইয়ের জন্য দয়া করে একটি নতুন প্রশ্ন জিজ্ঞাসা করুন - এটি ভবিষ্যতের দর্শকদের সেই পথে আরও সহায়তা প্রদান করবে। তবে সাধারণ নিয়ম হিসাবে, আপনি যখন এই বার্তাটি দেখেন তখন আপনার সার্ভারের ত্রুটিযুক্ত লগগুলি এবং ওয়াচডগটি দেখুন
ক্লাইভ

15

আপনি ফর্ম ফোল্ডারের অধীনে একটি ফর্ম তৈরি করতে পারেন। এবং তারপরে আপনি যে কোনও জায়গায় আপনার ফর্মটি কল করতে পারেন এবং প্রদর্শিত পরামিতিটি পাস করতে পারেন।

ড্রুপাল 7 :$form = drupal_get_form('form_id',$parameter);

ড্রুপাল 8 :$form = \Drupal::formBuilder()->getForm('Drupal\custom_module\Form\CustomModuleForm',$parameter);


1
নোড অ্যাড ফর্মটি কীভাবে পাবেন, উদাহরণস্বরূপ: নিবন্ধের ফর্মটি যুক্ত করুন (/ নোড / অ্যাড / নিবন্ধ)?
জয়কান্দারি

2
+1, আপনি নিয়ামকটিতে $ প্যারামিটার ছাড়াই এটি পাস করতে পারেন।
মিঃটি

5

ফর্মটি ফেরত (D8) বা রেন্ডার (D7) দুটি বিকল্প রয়েছে। এগুলি \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}


দ্রুপাল 7 উপরের সমতুল্য:

$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}

চিয়ার্স। যদি এটি সাহায্য করে তবে আমাকে জানান।


2

ডকুমেন্টেশন ক্লাসের একটি উদাহরণকেও অনুমতি দেয়। সুতরাং

$formObj = new \Drupal\demo\Form\MyForm();
$form = \Drupal::formBuilder()->getForm($formObj);

সঠিকও।


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

0

নীচে ধরে নেওয়া আপনার ফর্ম শ্রেণি

namespace Drupal\demo\Form;
use \Drupal\Core\Form\FormBase;
class MyForm extends FormBase {
}

আপনাকে প্রথমে আপনার ফর্ম শ্রেণি থেকে একটি নতুন উদাহরণ তৈরি করতে হবে এবং এটি ফর্ম বিল্ডারের গেটফর্মে পাস করতে হবে।

$form_obj = new \Drupal\demo\Form\MyForm();
$form = \Drupal::formBuilder()->getForm($form_obj);

2
আপনাকে "একটি নতুন উদাহরণ তৈরি করতে হবে না" - এটি ভুল। আপনি ক্লাস স্ট্রিং পাস করা উচিত।
খ্রিস্টান

0

ঠিক আছে যদি এখানে অন্য সমস্ত কিছু ব্যর্থ হয় তবে একটি নতুন ফর্মের স্টেট অবজেক্ট সেট করে একটি স্নিগ্ধ কৌশল।

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;

... তারপরে আপনার ফর্ম পদ্ধতিতে বিল্ডফর্ম আপনি তখন করতে পারেন ...

 // Get form state.
 $name = $form_state->get('name');
 if (!empty($name)) {
    $form['name'] = [
      '#type' => 'item',
      '#markup' => $name,
    ];
  }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.