【发布时间】:2016-07-15 09:50:44
【问题描述】:
我创建了一个自定义操作,它在我的订单显示模板底部呈现一个小表单。该表单是一个基本的复选框和一个带有两个按钮的选择字段。效果很好,但是渲染不正确。
我知道我渲染显示模板的方式不是 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 扩展。当我这样做时,我得到一个错误;
在渲染模板期间引发了异常 ("没有为控制器定义
_sonata_adminPath\To\Controller\PmodOrderController和当前 路线 ``")
而且我也知道我实际上应该使用像 return new RedirectResponse($this->admin->generateUrl('show')); 这样的回报
在这一点上,我不知道该做什么了。如果有人可以指导我如何在我的场景中正确地从 CRUDController 扩展,将不胜感激
【问题讨论】:
-
您应该扩展 SonataAdmin:CRUD 控制器并告诉 Sonata 管理员类使用它。您是否创建了适当的服务?
标签: php symfony sonata-admin sonata