web-dev-qa-db-ja.com

Drupal 8?

ファイルフィールドの場合、[許可されたファイル拡張子]にファイル拡張子を入力する必要があります。

anyファイル拡張子を許可する方法はありますか?または、ホワイトリストからブラックリストに切り替える方法は?

私が見つけたもの

2
unor

ノードフォームまたはフィールドレベルにフック変更を実装し、その中でバリデーターをカスタム関数に変更します。

/**
 * alter form field element:.
 * 
 * Implements hook_FORM_alter
 */
function my_module_form_alter(&$form, &$form_state, $form_id) {
    $upload_validators = array(
        'my_module_file_validate_extensions_blacklist' => ['jpg jpeg gif png mp4']
    );
    $form['your_file_field_element']['#upload_validators'] = $upload_validators;

}

あるいは、ウィジェットのフォームを変更することで、任意のノードまたはエンティティのフィールドの動作を変更できます。

function mymodule_field_widget_form_alter(&$element, &$form_state, $context) {  
   if ( "condition to check if it's your field" == TRUE) {
     $upload_validators = array(
            'my_module_file_validate_extensions_blacklist' => ['jpg jpeg gif png mp4']
        );
        $element['#upload_validators'] = $upload_validators;
  }
}

次に、必要なことを行う独自の関数を記述します。

function my_module_file_validate_extensions_blacklist(stdClass $file, $extensions) {
  $errors = array();
  $regex = '/\\.(' . preg_replace('/ +/', '|', preg_quote($extensions)) . ')$/i';
  if (preg_match($regex, $file->filename)) {
    $errors[] = t('files with the following extensions are not allowed: %files-allowed.', array(
      '%files-allowed' => $extensions,
    ));
  }
  return $errors
}
2
awm