Загрузка файла с неработающим компонентом Admin платформы API - PullRequest
0 голосов
/ 01 июля 2019

В документации по платформе API есть часть Обработка загрузки файлов . Код с VichUploaderBundle работает как ожидалось. Но далее в Документах относительно компонента администрирования Управление файлами и изображениями не работает. По крайней мере, формы создания и редактирования не отображаются. Я знаю, что мне пришлось немного откорректировать код, чтобы он работал с кодом в Обработка загрузки файлов , но он все равно не дает ожидаемых результатов.

Я изменил файл App.js соответственно

import React from 'react';
import { FunctionField, ImageField, ImageInput } from 'react-admin';
import { HydraAdmin } from '@api-platform/admin';
import parseHydraDocumentation from '@api-platform/api-doc-parser/lib/hydra/parseHydraDocumentation';

const entrypoint = "http://localhost:8080";

const myApiDocumentationParser = entrypoint => parseHydraDocumentation(entrypoint)
  .then( ({ api }) => {

    api.resources.map(resource => {
      if ('http://schema.org/MediaObject' === resource.id) {
        resource.fields.map(field => {
          if ('http://schema.org/contentUrl' === field.id) {
            field.denormalizeData = value => ({
              src: value
            });
            field.field = props => (
              <ImageField {...props} source={`${field.name}.src`} />
            );

            console.log(field);
            field.input = (
              <ImageInput accept="image/*" key={field.name} multiple={false} source={field.name}>
                <ImageField source="src"/>
              </ImageInput>
            );

            field.normalizeData = value => {
              if (value && value.rawFile instanceof File) {
                console.log("inst of file");

                const body = new FormData();
                body.append('file', value.rawFile);

                return fetch(`${entrypoint}/media_objects`, { body, method: 'POST' })
                  .then(response => response.json());
              }

              return value.src;
            };
          }

          return field;
        });
      }

      return resource;
    });

    return { api };
  });


export default (props) => <HydraAdmin apiDocumentationParser={myApiDocumentationParser} entrypoint={entrypoint}/>;

Я получаю следующую ошибку на клиенте:

Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object.

1 Ответ

1 голос
/ 01 июля 2019

Привет, получаю ту же проблему, я решил проблему, изменив поле.input следующим образом:

field.input = props =>(
                        <ImageInput {...props} accept="image/*" multiple={false} source={field.name}>
                            <ImageField source="src"/>
                        </ImageInput>
                    );

А также измените эту строку

if ('imageFile' === field.name) {

Теперь я могу выбрать файлчтобы загрузить из моих каталогов, но метод Post возвращает ошибку 404, не знаю, как решить эту проблему с Vich.Надеюсь, что маленький ответчик может помочь.

...