Symfony 4 переопределяет контроллер Sonata Admin CRUDPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Symfony 4 переопределяет контроллер Sonata Admin CRUD

Сообщение Anonymous »

У меня проблема с переопределением editAction администратора Sonata в Symfony 4.
Моя проблема в том, что у меня есть этот интерфейс для редактирования сообщений, как вы можете видеть, это два изображения:
Каждый раз, когда администратор меняет форматировщик контента, он меняется, и изменения сохраняются в mysql

но когда вы пытаетесь отредактировать сообщение опять же, администратор всегда получает «текст», выбранный по умолчанию.

Я хочу, чтобы выбранной по умолчанию опцией была та, которая сохранена в MySQL.
Например, если администратор изменится его в rawhtml, в следующий раз, когда он захочет отредактировать это сообщение, он должен найти rawhtml, выбранный по умолчанию (а не текст, как на изображении).

Это метод редактирования действия Sonata:

Код: Выделить всё

public function editAction($id = null)
{
$request = $this->getRequest();
// the key used to lookup the template
$templateKey = 'edit';

$id = $request->get($this->admin->getIdParameter());
$existingObject = $this->admin->getObject($id);

if (!$existingObject) {
throw $this->createNotFoundException(sprintf('unable to find the object with id: %s', $id));
}

$this->checkParentChildAssociation($request, $existingObject);

$this->admin->checkAccess('edit', $existingObject);

$preResponse = $this->preEdit($request, $existingObject);
if (null !== $preResponse) {
return $preResponse;
}

$this->admin->setSubject($existingObject);
$objectId = $this->admin->getNormalizedIdentifier($existingObject);

/** @var $form Form */
$form = $this->admin->getForm();
$form->setData($existingObject);
$form->handleRequest($request);
if ($form->isSubmitted()) {
$isFormValid = $form->isValid();

// persist if the form was valid and if in preview mode the preview was approved
if ($isFormValid && (!$this->isInPreviewMode() || $this->isPreviewApproved())) {
$submittedObject = $form->getData();
$this->admin->setSubject($submittedObject);

try {
$existingObject = $this->admin->update($submittedObject);

if ($this->isXmlHttpRequest()) {
return $this->renderJson([
'result' => 'ok',
'objectId' => $objectId,
'objectName' => $this->escapeHtml($this->admin->toString($existingObject)),
], 200, []);
}

$this->addFlash(
'sonata_flash_success',
$this->trans(
'flash_edit_success',
['%name%' => $this->escapeHtml($this->admin->toString($existingObject))],
'SonataAdminBundle'
)
);

// redirect to edit mode
return $this->redirectTo($existingObject);
} catch (ModelManagerException $e) {
$this->handleModelManagerException($e);

$isFormValid = false;
} catch (LockException $e) {
$this->addFlash('sonata_flash_error', $this->trans('flash_lock_error', [
'%name%' => $this->escapeHtml($this->admin->toString($existingObject)),
'%link_start%' => '',
'%link_end%' => '',
], 'SonataAdminBundle'));
}
}

// show an error message if the form failed validation
if (!$isFormValid) {
if (!$this->isXmlHttpRequest()) {
$this->addFlash(
'sonata_flash_error',
$this->trans(
'flash_edit_error',
['%name%' =>  $this->escapeHtml($this->admin->toString($existingObject))],
'SonataAdminBundle'
)
);
}
} elseif ($this->isPreviewRequested()) {
// enable the preview template if the form was valid and preview was requested
$templateKey = 'preview';
$this->admin->getShow();
}
}

$formView = $form->createView();
// set the theme for the current Admin Form
$this->setFormTheme($formView, $this->admin->getFormTheme());

// NEXT_MAJOR: Remove this line and use commented line below it instead
$template = $this->admin->getTemplate($templateKey);
// $template = $this->templateRegistry->getTemplate($templateKey);

return $this->renderWithExtraParams($template, [
'action' => 'edit',
'form' => $formView,
'object' => $existingObject,
'objectId' => $objectId,
], null);
}
Вот мой метод configureFormFields для PostAdmin:

Код: Выделить всё

        $isHorizontal = 'horizontal' == $this->getConfigurationPool()->getOption('form_type');
$formMapper
->with('group_post', [
'class' => 'col-md-8',
])
->add('author', ModelListType::class)
->add('title')
->add('abstract', TextareaType::class, [
'attr' => ['rows' => 5],
])
->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' => $isHorizontal ? 'span10 col-sm-10 col-md-10' : '', 'rows' => 20],
],
'ckeditor_context' => 'news',
'target_field' => 'content',
'listener' => true,
])
->end()
->with('group_status', [
'class' => 'col-md-4',
])
->add('enabled', CheckboxType::class, ['required' => false])
->add('image', ModelListType::class, ['required' => false], [
'link_parameters' => [
'context' => 'news',
'hide_context' => true,
],
])

->add('publicationDateStart', DateTimePickerType::class, [
'dp_side_by_side' => true,
])
->add('commentsCloseAt', DateTimePickerType::class, [
'dp_side_by_side' => true,
'required' => false,
])
->add('commentsEnabled', CheckboxType::class, [
'required' => false,
])
->add('commentsDefaultStatus', CommentStatusType::class, [
'expanded' => true,
])
->end()

->with('group_classification', [
'class' => 'col-md-4',
])
->add('tags', ModelAutocompleteType::class, [
'property' => 'name',
'multiple' => 'true',
'required' => false,
])
->add('collection', ModelListType::class, [
'required' => false,
])->end();
$options = $formMapper->get('content')->get('contentFormatter')->getOptions();
$options = array_merge($options,array('choices'=>array('markdown'=>'markdown','text'=>'text','rawhtml'=>'rawhtml','richhtml'=>'richhtml')));
$rawcontent = $formMapper->get('content')->get('rawContent');
$formMapper->get('content')->remove('contentFormatter')->remove('rawContent')->add('contentFormatter',ChoiceType::class,$options)->add($rawcontent);
он ​​по-прежнему не принимает выбранное значение по умолчанию.
Есть ли способ заставить его принимать реальное значение из MySQL в качестве «данных»?
Я не могу найти, где мне следует отредактировать форму, чтобы взять из объекта выбранное по умолчанию значение. Пожалуйста, если вы можете мне помочь с этим, я буду очень рад. Я не знаком с пакетом Sonata и формами управления.

Подробнее здесь: https://stackoverflow.com/questions/511 ... controller
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Sonata admin 4: пользовательские события js не работают
    Гость » » в форуме Jquery
    0 Ответы
    59 Просмотры
    Последнее сообщение Гость
  • Пользовательский шаблон sonata-admin для formMapperentityAdmin
    Anonymous » » в форуме Php
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Пользовательский шаблон sonata-admin для formMapperentityAdmin
    Anonymous » » в форуме Jquery
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Как установить проект sonata/user-bundle в Symfony 7?
    Anonymous » » в форуме Php
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Symfony Sonata — объект для строки
    Anonymous » » в форуме Php
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»