Source of file ControllerCrudable.php
Size: 4,556 Bytes - Last Modified: 2023-11-16T22:56:02+01:00
/home/websites/teicee/packagist/site/phpdoc/conf/../vendor/teicee/dorm-bundle/src/Traits/ControllerCrudable.php
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 | <?phpnamespace TIC\DormBundle\Traits; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; /** @TODO: pouvoir utiliser un autre trait fournissant la méthode renderAction */use TIC\TwigBundle\Traits\ControllerViewable; /** * Méthodes utiles pour disposer des actions CRUD. */trait ControllerCrudable {use ControllerItemable; // EntityManager avec méthodes getRepo, getItem, saveItem & deleteItem use ControllerViewable; // Méthode pour le rendu des vues Twig renderAction /** * List items (Index). * * @param array $filters * @param string $orders * @param array $params Liste de paramètres à passer à la vue * @return Response */protected function crudList(?array $filters = [], ?string $orders = null, array $params = []): Response { return $this->renderAction('list', array( 'items' => $this->getRepo()->listAll($filters, $orders), ) + $params); } /** * Show item (Read). * * @param mixed $id * @param array $params Liste de paramètres à passer à la vue * @return Response */protected function crudShow(mixed $id, array $params = []): Response { return $this->renderAction('show', array( 'item' => $this->getItem($id), ) + $params); } /** * Edit item (Create / Update). * Note: la clé $params['view'] permet de spécifier le template à utiliser ('form' par défaut) * * @param Request $request * @param mixed $id * @param array $options Liste d'options pour initialiser le FormType * @param array $params Liste de paramètres à passer à la vue * @return Response */protected function crudForm(Request $request, mixed $id = null, array $options = [], array $params = []): Response { // nouvel élément (avec valeurs par défaut) ou récupération de l'élément édité $item = $this->getItem($id); // génération du formulaire $form = $this->getForm($item, $request, $options); // validation du formulaire if ($form->isSubmitted() && $form->isValid()) { // enregistrement avec message et redirection return $this->saveItem($item, true); } // affichage du formulaire $page = isset($params['view']) ? $params['view'] : 'form'; return $this->renderAction($page, array( 'form' => $form, 'item' => $item, ) + $params); } /** * Delete item. * * @param Request $request * @param mixed $id * @return Response */protected function crudDelete(?Request $request, mixed $id): Response { // récupération de l'élément à supprimer $item = $this->getItem($id); // vérification du token CSRF (sinon redirection vers la fiche) if (false === $this->checkCSRF('delete'.$id, $request)) return $this->alert('danger', "error.csrf.invalid_token", $item); // suppression avec message et redirection return $this->deleteItem($item, true); } /** * Toggle item property boolean value. * * @param Request $request * @param mixed $id * @param string $field Nom de la propriété de l'élément à modifier * @param mixed $state Valeur à affecter à la propriété (convertie en booléen) * @return Response */protected function crudToggle(Request $request, mixed $id, string $field, string $state = null): Response { // récupération de l'élément à modifier $item = $this->getItem($id); // modification de la propriété, enregistrement avec message et redirection par défaut (referer) return $this->toggleItem($item, $field, $state); } /** * List items with pagination (AJAX). * @TODO *//* protected function crudPageAction(Request $request): JsonResponse { if (! $request->isXmlHttpRequest()) return $this->renderAction('list', array( 'items' => array(), 'nbItems' => $this->getRepo()->pageCount(), 'selOpts' => $this->selOpts, )); $length = max($request->get('length', 0), 0); $start = max($request->get('start', 0), 0); $order = $request->get('order', array()); $search = $request->get('search', array()); $columns = $request->get('columns', array()); $output = array( 'recordsTotal' => $this->getRepo()->pageCount(), 'recordsFiltered' => $this->getRepo()->pageCount($search, $columns), 'data' => array(), ); foreach ($this->getRepo()->pageSearch($search, $columns, $order, $start, $length) as $item) { $output['data'][] = explode("\n\n\n", $this->renderContent('list-line.data', array('item' => $item))); } return new JsonResponse($output); } */} |