Я создал настраиваемое действие, которое отображает небольшую форму в нижней части моего шаблона показа для заказов. Форма представляет собой базовый флажок и поле выбора с кнопками буксировки. Он работает отлично, но рендеринг не подходит.Добавление пользовательского действия в Sonata Admin
Я знаю, как я визуализирую шаблон для показа, не на 100% правильный, потому что когда он отображает, меню левой руки больше не работает.
Вот мой пользовательский контроллер с действием;
namespace Qi\Bss\FrontendBundle\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Qi\Bss\FrontendBundle\Crud\Crud;
use Qi\Bss\BaseBundle\Entity\Business\PmodOrder;
use Symfony\Component\HttpFoundation\RedirectResponse;
class PmodOrderController extends Controller
{
/**
* @Route("/{id}/approve", name = "order_approve")
* @Security("is_granted('IS_AUTHENTICATED_FULLY')")
* @Method({"GET", "POST"})
*/
public function approveAction(Request $request, $id){
$em = $this->getDoctrine()->getManager();
$order = $em->getRepository('QiBssBaseBundle:PmodOrder')->find($id);
$approveForm = $this->createFormBuilder($order)
->add('requireApproval', 'checkbox', array('label' => 'Require second Approval', 'required' => false, 'mapped' => false))
->add('secondApprover', 'choice', array('choices' => Crud::enumStatus(), 'label' => 'User', 'required' => false))
->getForm();
$approveForm->handleRequest($request);
if ($approveForm->isSubmitted() && $approveForm->isValid()) {
$secondApproval = $request->request->get('form');
$approval = $approveForm->getData();
if (isset($secondApproval['requireApproval'])) {
$approval->setStatus(PmodOrder::STATUS_PARTLY_APPROVED);
$em->persist($approval);
$em->flush();
return new RedirectResponse($this->container->get('router')->generate('admin_bss_base_business_pmodorder_show', array('id' => $order->getId())));
} else {
$approval->setSecondApprover(NULL);
$approval->setStatus(PmodOrder::STATUS_APPROVED);
$em->persist($approval);
$em->flush();
return new RedirectResponse($this->container->get('router')->generate('admin_bss_base_business_pmodorder_show', array('id' => $order->getId())));
}
}
return $this->render('QiBssFrontendBundle:PmodOrder:order_approve.html.twig', array(
'order' => $order,
'form' => $approveForm->createView(),
));
}
}
Что меня беспокоит тот факт, что я на самом деле полагаю, простирается от CRUDController Сонаты. И когда я делаю это, я получаю сообщение об ошибке;
Исключение было брошено во время рендеринга шаблона («Там нет
_sonata_admin
определен для контроллераPath\To\Controller\PmodOrderController
и текущий маршрут` `»)
И я также знаю, что я на самом деле предполагаю использовать возврат, как return new RedirectResponse($this->admin->generateUrl('show'));
На данный момент я не знаю, что делать дальше. Если кто-нибудь может пожалуйста, руководство меня, как правильно проходить от CRUDController в моем случае, это было бы действительно оценили
Вы должны расширить SonataAdmin: CRUD контроллер и сказать сонатную администратора класс, чтобы использовать его. Вы создали надлежащее обслуживание? –
Просто прочитайте документ https://sonata-project.org/bundles/admin/master/doc/cookbook/recipe_custom_action.html – pbenard