我已经创建了一个自定义操作,该操作在我的展示模板的底部呈现订单的小表单。该表格是一个基本的复选框和一个带有两个按钮的选择区域。它完美的工作,但渲染是不正确的。将自定义操作添加到Sonata管理
我知道我渲染展示模板的方式不是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(),
));
}
}
令我困扰的是事实上,我实际上是想从Sonata的CRUDController扩展。当我这样做时,我得到一个错误;
一个例外模板 的渲染过程中被抛出(“没有对控制器
Path\To\Controller\PmodOrderController
和当前 路径``定义_sonata_admin
”)
而且我也知道我实际上想要使用像return new RedirectResponse($this->admin->generateUrl('show'));
这样的回报在这一点上,我不知道该怎么做了。如果有人可以请指导我如何在我的情况,从CRUDController正确地扩展,这将非常感激
您应该扩展SonataAdmin:CRUD控制器并告诉奏鸣曲管理员类使用它。你创造了适当的服务吗? –
只需阅读文档https://sonata-project.org/bundles/admin/master/doc/cookbook/recipe_custom_action.html – pbenard