web-dev-qa-db-fra.com

Comment créer un champ 'Télécharger un fichier'?

J'ai un type d'entité de contenu et j'aimerais avoir un champ "Télécharger un fichier". J'ai déclaré le champ dans ma classe d'entité

$fields['file'] = BaseFieldDefinition::create('file')
    ->setLabel(t('Upload a file'))
    ->setDescription(t('Choose file from your computer'));

Et dans EntityForm, j'essaie de définir certains paramètres, car je dois le rendre fiable plus tard avec les '#states'

$form['file'] = [
    '#title' => $this->t('File'),
    '#description' => $this->t('Upload a file from your computer'), 
    '#type' => 'file',
    '#default_value' => $entity->file->value,
];

Mais pour le moment, le champ est affiché, mais j'ai des problèmes pour enregistrer le formulaire. Le fichier est joint, mais n'est pas téléchargé et l'erreur indique:

Erreur fatale: appel à une fonction membre getValue () sur un non-objet dans C:\A plus\drupalsite\core\modules\file\src\Plugin\Validation\Constraint\FileValidationConstraintValidator.php à la ligne 18

3
badm
 $form['File'] = array(
        '#type' => 'managed_file',
        '#title' => t('Choose  File'),
        '#upload_location' => 'public://MyFilesFolder/',
        '#default_value' => $entity->get('File')->value,
        '#description' => t('upload file'),
        '#states' => array(
          'visible' => array(
            ':input[name="File_type"]' => array('value' => t('Upload Your File')),
          ),
        ),
      );
3
make-me-alive