Если файл загружен через поле, созданное в конструкторе полей какого либо entity Drupal, то соответствующий модуль, предоставляющий функционал загрузки файла, сам обеспечит установку необходимого статуса. Что если поле было создано программно, и требуется сменить статус файла с ‘Временного’ на ‘Постоянный’?
Допустим, у нас в какой то форме добавлено поле изображения следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
token = \Drupal::token(); $config['image'] = ... // загрузили данные из какого то источника // объявили поле Image $form['image'] = [ '#type' => 'managed_file', '#title' => t('Image'), '#upload_validators' => array( 'file_validate_extensions' => array('gif png jpg jpeg'), 'file_validate_size' => \Drupal\Component\Utility\Environment::getUploadMaxSize() / pow(1024, 2) . 'M', ), '#theme' => 'image_widget', '#preview_image_style' => 'medium', '#upload_location' => $token->replace('public://images/[date:custom:Y]-[date:custom:m]', []), '#default_value' => $config['image']), ]; |
Обратите внимание, что здесь вы можете настроить валидаторы, а также использовать токены подстановки, если вам это требуется.
На этапе обработки формы submit, установите признак PERMANENT для загруженного файла:
1 2 3 4 5 6 7 8 |
public function mySubmit($form, FormStateInterface $form_state) { $images = $form_state->getValue('image'); if (!empty($images) && ($file = \Drupal\file\Entity\File::load($images[0])) ) { $file->setPermanent(); $file->save(); } } |