Je souhaite générer un petit formulaire à l'intérieur d'un modèle d'émission Sonata Admin. Ce que j'ai fait jusqu'ici est de créer la fonction dans le CRUD personnalisé pour cette entité spécifique (ordre) qui s'étend de la CRUD par défaut de Sonata;Ajout d'un formulaire personnalisé à l'intérieur du modèle de présentation d'une entité d'administration Sonata
public function approveOrderAction($id = null)
{
$request = $this->getRequest();
$id = $request->get($this->admin->getIdParameter());
$order = $this->admin->getObject($id);
$approveForm = $this->createFormBuilder($order)
->add('reqSecondApprover', 'checkbox', array('label' => 'Require second Approval', 'required' => false))
->add('secondApprover', 'choice', array('choices' => Crud::getWhatever(array('Developer')), 'required' => false))
->getForm();
$approveForm->handleRequest($request);
if ($approveForm->isSubmitted() && $approveForm->isValid()) {
$secondApproval = $request->request->get('form');
$approval = $approveForm->getData();
if (isset($secondApproval['reqSecondApprover'])) {
$order->setStatus(PmodOrder::STATUS_PARTLY_APPROVED);
} else {
$order->setStatus(PmodOrder::STATUS_APPROVED);
$order->setSecondApprover(null);
}
$em->persist($approval);
$em->flush();
return new RedirectResponse($this->admin->generateUrl('show'));
}
return $this->render('AppBundle:PmodOrder:order_approve.html.twig', array(
'order' => $order,
'form' => $approveForm->createView(),
));
}
Dans ma commandeAdmin j'ai la méthode configShowFields
;
protected function configureShowFields(ShowMapper $showMapper)
{
$order = $this->getSubject();
$showMapper
->with('General')
->add('createdBy', null, array('label' => 'Requested By'))
->add('createdAt', null, array('label' => 'Date Requested'))
->with('Order Details')
->add('orderRows', NULL, array('template' => 'AppBundle:PmodOrderRow:orderrow_overview.html.twig'))
->end()
->with('Actions')
->add('actions', NULL, array('template' => 'AppBundle:PmodOrderAction:order_actions.html.twig', 'route' => 'approve'))
->end()
;
}
Le modèle order_actions
ressemble à ceci et montrera les fonctionnalités pertinentes en fonction du statut de l'ordre et qui est connecté, donc comment fonctionnent avec tant de routes ?; diffent
<td>
{% if app.user.id == object.firstApprover and object.status == 1%}
{{ render(controller('AppBundle:PmodOrderCRUD:approveOrder', { 'id': object.id })) }}
{% elseif app.user.id == object.secondApprover and object.status == 2 %}
<a href="{{ path('order_second_approve', { 'id': object.id })}}" class="btn btn-primary"><i class="fa fa-check"></i> Approve</a>
<a href="{{ path('order_disapprove', { 'id': object.id })}}" class="btn btn-default"><i class="fa fa-times"></i> Disapprove</a>
{% elseif app.user == object.createdBy and object.status == 3 %}
<a href="{{ path('order_place', { 'id': object.id })}}" class="btn btn-primary">Place Order</a>
<a href="{{ path('order_place', { 'id': object.id })}}" class="btn btn-default">Cancel Order</a>
{% else %}
-
{% endif %}
</td>
En essayant ceci, j'obtiens une erreur;
Une exception a été levée lors du rendu d'un modèle ("Il n'y a pas
_sonata_admin
défini pour le contrôleurApBundle\Controller\PmodOrderCRUDController
et la route` `courant ") dans AppBundle: PmodOrderAction: order_actions.html.twig à la ligne 3.
Je comprends de la documentation que je dois utiliser cette méthode configureRoutes
; Mais je n'arrive pas à le faire fonctionner et je ne suis pas sûr de la façon de rendre les formulaires au lieu d'un simple bouton de lien. Est-ce que quelqu'un peut m'aider à résoudre mon problème?