Я новичок в Symfony, так извините мое невежество.Соната админ. Как передать данные сообщения другому контроллеру
У меня есть родительский объект «Статья» и суб-entites вроде «Страницы», «Новости» и т.д. Они имеют общие поля, такие как название, дата и т.д.
Я создал первоначальную форму для статьи (в классе ArticleAdmin), где можно выбрать название и тип суб-сущности, и попытался вызвать класс администратора субинститута и передать туда POST-данные. Но это не сработало, потому что createAction в Controller отвечает как за рендеринг формы, так и за ее обработку, и когда я пытаюсь переопределить ее в моем createAction(), я получаю сообщение об ошибке «Ошибка: вызов частного метода Sonata \ AdminBundle \ контроллер \ CRUDController :: setFormTheme()»
Вот мой код:
ArticleAdmin - родительский объект
<?php
namespace A26\CMS\ContentBundle\Admin;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
class ArticleAdmin extends AbstractAdmin
{
// Fields to be shown on create/edit forms
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('title', 'text', array(
'label' => 'Title'
))
->add('slug', 'text', array(
'label' => 'Slug'
))
->add('type', 'choice', array(
'choices' => array(
'Page' => 'Text Page',
'News' => 'News'
),
));
}
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('title');
}
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('title')
->add('is_publish');
}
protected function configureShowFields(ShowMapper $showMapper)
{
$showMapper
->add('title');
}
}
?>
PageAdmin - подобъект
<?php
namespace A26\CMS\PagesBundle\Admin;
use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Ivory\CKEditorBundle\Form\Type\CKEditorType;
class PageAdmin extends AbstractAdmin
{
// Fields to be shown on create/edit forms
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->tab('Content')
->with('Content')
->add('title', 'text', array(
'label' => 'Title'
))
->add('content', CKEditorType::class, array(
'label' => 'Content'
))
->end()
->end();
}
// Fields to be shown on filter forms
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('title');
}
// Fields to be shown on lists
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('title');
}
// Fields to be shown on show action
protected function configureShowFields(ShowMapper $showMapper)
{
$showMapper
->add('title');
}
}
?>
ArticleAdmin Controller - я скопировал CRUDController и заменить блок
если ($ форма-> isSubmitted()) {...}
<?php
namespace A26\CMS\ContentBundle\Controller;
use Sonata\AdminBundle\Controller\CRUDController as Controller;
class ArticleAdminController extends Controller
{
public function createAction()
{
$request = $this->getRequest();
// the key used to lookup the template
$templateKey = 'edit';
$this->admin->checkAccess('create');
$class = new \ReflectionClass($this->admin->hasActiveSubClass() ? $this->admin->getActiveSubClass() : $this->admin->getClass());
if ($class->isAbstract()) {
return $this->render(
'SonataAdminBundle:CRUD:select_subclass.html.twig',
array(
'base_template' => $this->getBaseTemplate(),
'admin' => $this->admin,
'action' => 'create',
),
null,
$request
);
}
$object = $this->admin->getNewInstance();
$preResponse = $this->preCreate($request, $object);
if ($preResponse !== null) {
return $preResponse;
}
$this->admin->setSubject($object);
/** @var $form \Symfony\Component\Form\Form */
$form = $this->admin->getForm();
$form->setData($object);
$form->handleRequest($request);
if ($form->isSubmitted()) {
$response = $this->forward("A26CMSPagesBundle:PageAdmin:create", array('_sonata_admin' => $this->container->get('request')->get('_sonata_admin')));
dump($response);
die();
}
$formView = $form->createView();
// set the theme for the current Admin Form
$this->setFormTheme($formView, $this->admin->getFormTheme());
return $this->render($this->admin->getTemplate($templateKey), array(
'action' => 'create',
'form' => $formView,
'object' => $object,
), null);
}
}
Помогите, пожалуйста! Может быть, это может быть реализовано по-другому?
Спасибо заранее!