আমি কীভাবে আপলোড করা ফাইলটি ফাইল-ম্যানেজড টেবিলে স্থায়ীভাবে সংরক্ষণ করব?


11

ড্রপাল 8-এ ফাইল_ম্যানেজড টেবিলের 1 এর সমান স্ট্যাটাস সহ আমি একটি আপলোড করা ফাইল কীভাবে সংরক্ষণ করব?

আমি যখনই কোনও ফাইল আপলোড করি তখন এটি স্ট্যাটাস মান 0 সহ ফাইল_ম্যানেজড টেবিলের মধ্যে সংরক্ষণ করা হয় I
আমি File::load( $form_state->getValue('image'))ফাইলটি লোড করতে ব্যবহার করেছি । এর পরে আমার কী করা দরকার?

ড্রুপাল 7 এ, আমি ব্যবহার করব $file->status = FILE_STATUS_PERMANENT। দ্রুপাল 8 এর সমমানের কোডটি কী?

class AddBannerForm extends FormBase {


public function getFormId()
{
  return 'add_banner_form';
}

public function buildForm(array $form, FormStateInterface $form_state)
{


  $form['image'] = array(
    '#type'          => 'managed_file',
    '#title'         => t('Choose Image File'),
    '#upload_location' => 'public://images/',
    '#default_value' => '',
    '#description'   => t('Specify an image(s) to display.'),
    '#states'        => array(
      'visible'      => array(
        ':input[name="image_type"]' => array('value' => t('Upload New Image(s)')),
      ),
    ),
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save image'),
  );

  return $form;
}


public function validateForm(array &$form, FormStateInterface $form_state)
{
    File::load( $form_state->getValue('image') );
}


public function submitForm(array &$form, FormStateInterface $form_state)
{

}
}

উত্তর:


17

ধন্যবাদ আপনি @Clive & @kiamlaluno

/* Fetch the array of the file stored temporarily in database */ 
   $image = $form_state->getValue('image');

/* Load the object of the file by it's fid */ 
   $file = File::load( $image[0] );

/* Set the status flag permanent of the file object */
   $file->setPermanent();

/* Save the file in database */
   $file->save();

1
এখন আপনি কি স্কিমা.আইএমএল ফাইলটিতে এটি করতে পারেন?
গিলাইম বোইস

7
জাসোদীপ ভাল লাগলো !! তবে এটি কাজ করার জন্য আমার পক্ষে যথেষ্ট ছিল না। সেটিংস setPermanent()& পরে save()। আমি একটি অতিরিক্ত পদক্ষেপ করতে হয়েছিল $file_usage = \Drupal::service('file.usage'); $file_usage->add($file, 'mymodule', 'mymodule', \Drupal::currentUser()->id()); :) আশা করি এটি সাহায্য করে !!
জয়কান্ডারী

1
আশা করি এই লিঙ্কটি সহায়তা করেছে: api.drupal.org/api/drupal/core%21 Modules
21file

4

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

public function submitForm(array &$form, FormStateInterface $form_state) {
  parent::submitForm($form, $form_state);
  $image = $form_state->getValue('welcome_image');
  // Load the object of the file by its fid. 
  $file = File::load($image[0]);
  // Set the status flag permanent of the file object.
  if (!empty($file)) {
    $file->setPermanent();
    // Save the file in the database.
    $file->save();
    $file_usage = \Drupal::service('file.usage'); 
    $file_usage->add($file, 'welcome', 'welcome', \Drupal::currentUser()->id());
  }
  $config = $this->config('welcome.settings');
  $config->set('welcome_text', $form_state->getValue('welcome_text'))
    ->set('welcome_image', $form_state->getValue('welcome_image'))
    ->save();
}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.