Проблема CKEditor с SonataFormatter + SonataNews в Symfony 4.4 - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь интегрировать SonataNewsBundle в Symfony 4.4.

CKEditor не показывает в поле «Content» для сообщения новостей. Я прочитал, наверное, все, что можно найти в Интернете, и не смог найти способ решить эту проблему.

fos_ck_editor.yaml:

editor:
    base_path: "bundles/fosckeditor"
    js_path:   "bundles/fosckeditor/ckeditor.js"
    input_sync: true
    default_config: base_config
    configs:
        base_config:
            toolbar: full

twig:
    form_themes:
        - '@FOSCKEditor/Form/ckeditor_widget.html.twig'

sonata_admin.yaml:

sonata_admin:
    title: 'Something...'
    dashboard:
        blocks:
            - { type: sonata.admin.block.admin_list, position: left }
    options:
        legacy_twig_text_extension: false

    security:
        handler: sonata.admin.security.handler.role

    # DEPRECATED: override templates to enable CKEditor
    templates:
        edit: Admin/CRUD/edit.html.twig

    # extra CSS/JS to for SonataFormatter
    assets:
        extra_javascripts:
            - bundles/fosckeditor/ckeditor.js
            - bundles/sonataformatter/vendor/markitup-markitup/markitup/jquery.markitup.js
            - bundles/sonataformatter/markitup/sets/markdown/set.js
            - bundles/sonataformatter/markitup/sets/html/set.js
            - bundles/sonataformatter/markitup/sets/textile/set.js

        extra_stylesheets:
            - bundles/sonataformatter/markitup/skins/sonata/style.css
            - bundles/sonataformatter/markitup/sets/markdown/style.css
            - bundles/sonataformatter/markitup/sets/html/style.css
            - bundles/sonataformatter/markitup/sets/textile/style.css

# General block configuration
sonata_block:
    blocks:

        # Enable the SonataAdminBundle block
        sonata.admin.block.admin_list:
            contexts: [admin]

        # Enable SonataFormatter block
        sonata.formatter.block.formatter: ~

sonata_formatter.yaml:

sonata_formatter:
    #default_formatter: text
    default_formatter: markdown
    formatters:
        markdown:
            service: sonata.formatter.text.markdown
            extensions:
                - sonata.formatter.twig.control_flow
                - sonata.formatter.twig.gist
                - sonata.media.formatter.twig
        text:
            service: sonata.formatter.text.text
            extensions:
                - sonata.formatter.twig.control_flow
                - sonata.formatter.twig.gist
                - sonata.media.formatter.twig
        rawhtml:
            service: sonata.formatter.text.raw
            extensions:
                - sonata.formatter.twig.control_flow
                - sonata.formatter.twig.gist
                - sonata.media.formatter.twig
        richhtml:
            service: sonata.formatter.text.raw
            extensions:
                - sonata.formatter.twig.control_flow
                - sonata.formatter.twig.gist
                - sonata.media.formatter.twig
        twig:
            service: sonata.formatter.text.twigengine
            extensions: [] # Twig formatter cannot have extensions

    ckeditor:
        templates:
            browser: '@SonataFormatter/Ckeditor/browser.html.twig'
            upload: '@SonataFormatter/Ckeditor/upload.html.twig'

Потом небольшой оверрайд (ради экспериментов) в sonata_news.yaml:

sonata_news:
(...cut...)
    # override defaults
    admin:
        post:
            class:  App\Admin\PostAdmin

После редактирования Пост просто уходит меня с пустым «Содержимое» и редактируемым текстовым полем «Необработанное содержимое».

Когда я следую одному из найденных мной советов и применяю класс ckeditor CSS к полю «Содержимое» с приведенным ниже фрагментом, CKEditor действительно показывает, но опять же в поле «Raw content» (а не «Content»), без какой-либо реакции / изменений в настройках средства форматирования, без использования фактических форматов ...

PostAdmin.php

(...cut...)
     protected function configureFormFields(FormMapper $formMapper)
     {

         // get parent field configuration
         parent::configureFormFields($formMapper);
         $isHorizontal = 'horizontal' === $this->getConfigurationPool()->getOption('form_type');

         $formMapper
            ->with('group_post')
                ->add('content', FormatterType::class, [
                    'event_dispatcher' => $formMapper->getFormBuilder()->getEventDispatcher(),
                    'format_field' => 'contentFormatter',
                    'source_field' => 'rawContent',
                    'source_field_options' => [

                        'horizontal_input_wrapper_class' => $isHorizontal ? 'col-lg-12' : '',
                        'attr' => [

                            //'class' => 'ckeditor',    // NOTE: only way to get it half-assed-working
                            'rows'  => 20
                        ]
                    ],
                    'ckeditor_context' => 'news',
                    'target_field' => 'content',
                    'listener' => true,
                ])
            ->end()
        ;
     }

На консоли отладки JS нет ошибок, а на сетевой консоли нет ресурсов 404 ...

** EDIT:

Как и я сравнение с необработанным HTML выводом https://demo.sonata-project.org/ при редактировании сообщения и моей собственной формой, я вижу, что мне не хватает некоторых встроенных JavaScript код, который ссылается на селектор формата и сам CKEditor. Откуда он берется и почему на моем конце не отображается?

** EDIT2:

... и, по-видимому, он исходит из formatter.html.twig;

vendor$ grep "This code requires CKEDITOR and jQuery" -r *
sonata-project/formatter-bundle/src/Resources/views/Form/formatter.html.twig:            // This code requires CKEDITOR and jQuery MarkItUp

** EDIT3:

Я ясно вижу, что проблема в том, что Symfony 4.4 не разрешает объявление yaml, требуемое пакетом форматирования, как указано здесь: https://sonata-project.org/bundles/formatter/2-x/doc/reference/formatter_widget.html

twig:
    debug:            '%kernel.debug%'
    strict_variables: '%kernel.debug%'

    form:
        resources:
            # ...
            - 'SonataFormatterBundle:Form:formatter.html.twig'

Преобразование этой части в формат Symfony 4.4 тоже не работает:

framework:
    templating:
        form:
            resources:
                - 'SonataFormatterBundle:Form:formatter.html.twig'

Кто угодно?

1 Ответ

1 голос
/ 05 августа 2020

Хотите верьте, хотите нет, но не хватало только:

twig:
    form_themes:
        - 'SonataFormatterBundle:Form:formatter.html.twig'

в sonata_formatter.yaml

Официальная документация должна быть обновлена ​​для Symfony 4.4!

...