注文用にショーテンプレートの下部に小さなフォームをレンダリングするカスタムアクションを作成しました。フォームは、基本的なチェックボックスとトウボタン付きの選択フィールドです。それは完璧に動作しますが、レンダリングは正しくありません。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から拡張すると考えていることは、私にとって気になることです。そして私がそれをするとき、私は誤りを得る。
例外はテンプレート のレンダリング中にスローされた(「コントローラ
Path\To\Controller\PmodOrderController
と現在の ルート ``に定義された_sonata_admin
はありません」)
そして私も承知しています私は実際に戻り値を使用すると仮定していますreturn new RedirectResponse($this->admin->generateUrl('show'));
この時点で私はもう何をすべきか分かりません。誰かが私のシナリオではCRUDControllerから正しく拡張する方法を私を導いてくださいすることができた場合、それは本当にここでは例を
SonataAdmin:CRUDコントローラを拡張し、それを使用するにはsonataadminクラスを拡張する必要があります。適切なサービスを作りましたか? –
https://sonata-project.org/bundles/admin/master/doc/cookbook/recipe_custom_action.html – pbenard