"L'antenne truc a bien été créée", /* truc sera remplacé par le vrai nom ensuite */ 'edit' => "L'antenne truc a bien été modifiée", /* truc sera remplacé par le vrai nom ensuite */ 'delete' => "L'antenne truc a bien été supprimée" /* truc sera remplacé par le vrai nom ensuite */ ]; /** * @var array */ protected $acceptedParams = []; use RouterAwareAction; public function __construct( RendererInterface $renderer, Router $router, AntenneTable $antenneTable, RegionTable $regionTable, FlashService $flash ) { $this->renderer = $renderer; $this->router = $router; $this->antenneTable = $antenneTable; $this->regionTable = $regionTable; $this->flash = $flash; } public function __invoke(Request $request) { $this->renderer->addGlobal('viewPath', $this->viewPath); $this->renderer->addGlobal('routePrefix', $this->routePrefix); if ($request->getMethod() === 'DELETE') { return $this->delete($request); } if (substr((string)$request->getUri(), -3) === 'new') { return $this->create($request); } if ($request->getAttribute('id')) { return $this->edit($request); } return $this->index($request); } /** * Affiche la liste des éléments * @param Request $request * @return string */ public function index(Request $request): string { $params = $request->getQueryParams(); $items = $this->table->findAll()->paginate(12, $params['p'] ?? 1); return $this->renderer->render($this->viewPath . '/index', compact('items')); } /** * Edite un élément * @param Request $request * @return ResponseInterface|string */ public function edit(Request $request) { $id = (int)$request->getAttribute('id'); $item = $this->table->find($id); $antenne = $item->antenneId; if ($request->getMethod() === 'POST') { $validator = $this->getValidator($request); if ($validator->isValid()) { $this->table->update($id, $this->prePersist($request, $item)); $this->postPersist($request, $item); // On récupère le nom du produit pour l'afficher dans le message de success $requete = $this->prePersist($request, $item); $occurrence = $requete['name']; $message_edit = $this->messages['edit']; $message_edit = str_replace('truc', "'".$occurrence."'", $message_edit ); $this->flash->success($message_edit); $region = $request->getAttribute('region'); $slug = $request->getAttribute('slug'); return $this->redirect($this->routePrefix . '.index',compact('region','slug','antenne' )); } $errors = $validator->getErrors(); Hydrator::hydrate($request->getParsedBody(), $item); } $errors = $errors ?? ''; return $this->renderer->render( $this->viewPath . '/edit', $this->formParams(compact('item', 'errors')) ); } /** * Crée un nouvel élément * @param Request $request * @return ResponseInterface|string */ public function create(Request $request) { $item = $this->getNewEntity(); if ($request->getMethod() === 'POST') { $validator = $this->getValidator($request); if ($validator->isValid()) { $this->table->insert($this->prePersist($request, $item)); $region = $request->getAttribute('region'); $slug = $request->getAttribute('slug'); $antenne = $request->getParsedBody()['antenne_id']; $this->postPersist($request, $item); // On récupère le nom du produit pour l'afficher dans le message de success $requete = $this->prePersist($request, $item); $occurrence = $requete['name']; $message_create = $this->messages['create']; $message_create = str_replace('truc', "'".$occurrence."'", $message_create ); $this->flash->success($this->messages['create']); return $this->redirect($this->routePrefix . '.index',compact('region','slug','antenne' )); } Hydrator::hydrate($request->getParsedBody(), $item); $errors = $validator->getErrors(); } $errors = $errors ?? ''; return $this->renderer->render( $this->viewPath . '/create', $this->formParams(compact('item', 'errors')) ); } /** * Action de suppression * * @param Request $request * @return ResponseInterface */ public function delete(Request $request) { $this->table->delete($request->getAttribute('id')); $region = $request->getAttribute('region'); $slug = $request->getAttribute('slug'); $antenne = $request->getParsedBody()['antenne_id']; // On récupère le nom du produit pour l'afficher dans le message de success $occurrence = $request->getParsedBody()['produit_name']; $message_delete = $this->messages['delete']; $message_delete = str_replace('truc', "'".$occurrence."'", $message_delete ); $this->flash->success($message_delete); return $this->redirect($this->routePrefix . '.index',compact('region','slug','antenne' )); } /** * Filtre les paramètres reçus par la requête * * @param Request $request * @return array */ protected function prePersist(Request $request, $item): array { return array_filter(array_merge($request->getParsedBody(), $request->getUploadedFiles()), function ($key) { return in_array($key, $this->acceptedParams); }, ARRAY_FILTER_USE_KEY); } /** * Permet d'effectuer un traitement après la persistence * @param Request $request * @param $item */ protected function postPersist(Request $request, $item): void { } /** * Génère le validateur pour valider les données * * @param Request $request * @return Validator */ protected function getValidator(Request $request) { return new Validator(array_merge($request->getParsedBody(), $request->getUploadedFiles())); } /** * Génère une nouvelle entité pour l'action de création * * @return mixed */ protected function getNewEntity() { $entity = $this->table->getEntity(); return new $entity(); } /** * Permet de traiter les paramètres à envoyer à la vue * * @param $params * @return array */ protected function formParams(array $params): array { return $params; } }