Uwaga, celowo wybrałem najgłupszy kontroler projektu, robiony przez kompletnego amatora, byle działał, nikt miał tego nie oglądać, ani używać.
Pomijając głupie nazwy i liczbę użytych warunków "else", Z czym mam problem:
- nie wiem czym się kierować przenosząc kawał kodu do osobnej klasy. Czy mam po prostu wyciąć cały kod, przenieść do nowej klasy i w kontrolerze odebrać tylko właściwości potrzebne do renderowania? Czy raczej z powyższego porobić z 10 nowych klas? ale czym się kierować wybierając kawałek kodu do nowej klasy?
- czy każdą utworzoną klasę mam zamienić w usługę?
symfony
class ZarzadcaController extends Controller { /** * @Route("/panel/{findBy}-{Identifier}", name="panelSortFromDetails") * @Route("/panel/{sortArr}/{orderBy}/{query}/{EntFldName}", name="panelSort") */ public function panelsortAction(Request $request,$sortArr=false, $orderBy='idzamowienie', $query=false,$EntFldName=false, $findBy = false, $Identifier = false) { //[-ASC DESC sortowanie-] //Jeśli pierwszy raz otwieram stronę to tworzę tablicę $sortArr //i każdy element ustawiam na 'null' poza Numer=ASC //else //tworzę tablicę $sortArr każdy element ustawiam na 'null' //poza klikniętym który zmieniam ASC na DESC i odwrotnie . /*1*/ if(!($sortArr)){$sortArr=$this->setAllNullNumerASC();} else{ $sortArr = $this->setSortVar($sortArr); $sortArr = $this->AscDescChanger($sortArr,$orderBy); } //[-Formularze-] Tworzę formularze o strukturze XxxType. Bez zawartości. 'action' => $this->generateUrl('panelSortFromDetails'))); 'action' => $this->generateUrl('panelSortFromDetails'))); // $DataZamForm = $this->createForm(DataZamType::class); 'action' => $this->generateUrl('panelSortFromDetails'))); // $NrKlientaForm = $this->createForm(NrKlientaType::class); //[-Formularze-]Jeśli wypełniłem formularz to odbieram zawartość $StatusForm->handleRequest($request); $DataZamForm->handleRequest($request); $NrKlientaForm->handleRequest($request); //kasuję kilka zmiennych bo nie wiedzieć czemu po wybraniu filtra i zmianie sortowania //nie reaguje na kolejne filtry if(($StatusForm->isValid())or($DataZamForm->isValid())or($NrKlientaForm->isValid())){ $EntFldName=false; $query=false; } //[-Filtr-]Sprawdza czy kliknięty był filtr. //$findBy = 'status' or 'data' or 'klient' or 'all' // $findBy = $this->findByWhat($StatusForm,$DataZamForm,$NrKlientaForm,$EntFldName); if(!($findBy)){ $findBy = $this->findByWhat($StatusForm,$DataZamForm,$NrKlientaForm,$EntFldName);} //[-Filtr-]Jeśli przechodzę z filtra do filtra to kasuję query if(!($EntFldName)){$query=false;} //[-Repozytorium-][-Sortowanie-]Najważniejsze. Tworzę repozytorium $zamowienia (wykorzystywane do //utworzenia tabeli i formularzy panelu) i ustawiam elementy //tablicy $sortArr. if($findBy == 'all'){ $temp = $this->zamowienieRepositoryMakerAndSortArrChangerForAll($orderBy, $sortArr); $sortArr = $temp['sortArr']; $zamowienia = $temp['zamowienia']; }elseif($findBy == 'idstatus'){ //jeśli wcześniej użyłem filtrowania a teraz tylko kliknięto zmianę sortowania to //odbieram poprzednie dane o filtrze w przeciwnym razie odbieram dane formularza filtra if(!($query)){ if(!$Identifier){ $Identifier = $StatusForm->get('status')->getData(); $Identifier = $Identifier->getIdstatus(); } $query = 'idstatus = '.$Identifier; } $EntFldName = 'idstatus'; /*2*/ $temp = $this->zamowienieRepositoryMakerAndSortArrChangerNotForAll( $query ,$sortArr, $orderBy); $sortArr = $temp['sortArr']; $zamowienia = $temp['zamowienia']; } elseif($findBy == 'data'){ if(!($query)){ $od = $DataZamForm->get('od')->getData()->format('Y-m-d H:i:s'); $do = $DataZamForm->get('do')->getData()->format('Y-m-d H:i:s'); $query = "datazlozenia BETWEEN '".$od."' AND '".$do."'"; } else { } $EntFldName = 'data'; $temp = $this->zamowienieRepositoryMakerAndSortArrChangerNotForAll( $query ,$sortArr, $orderBy); $sortArr = $temp['sortArr']; $zamowienia = $temp['zamowienia']; }elseif($findBy == 'idklient'){ if(!($query)){ if(!$Identifier){ $Identifier = $NrKlientaForm->get('idklient')->getData(); $Identifier = $Identifier->getIdklient(); } $query = 'idklient = '.$Identifier; } $EntFldName = 'idklient'; /*2*/ $temp = $this->zamowienieRepositoryMakerAndSortArrChangerNotForAll( $query ,$sortArr, $orderBy); $sortArr = $temp['sortArr']; $zamowienia = $temp['zamowienia']; }else{ throw new \Exception('Nie można znaleźć zamówień dla '.$findBy); } //[-Repozytorium II-]Tworzy zmienną $zamowieniaProdukty wysyłaną do Twiga. Wykorzystywane //tam do obliczenia sumy i ilości produktów dla każdego zamówienia. $zamowieniaProdukty= $this->getDoctrine() ->getRepository('AppBundle:ZamowienieProdukt') ->findall(); //[-Formularz Główny-]Ładowanie $zamowieniaList - zmiennej potrzebnej do głównego formularza. //To kluczowa zmienna. Obiekt ZamowienieList() to kolekcja formularzy //pozwala na stworzenie wielu formularzy z jednym buttonem $zamowieniaList = new ZamowienieList(); foreach ($zamowienia as $zamowienie) { $zamowieniaList->getZamowienia()->add($zamowienie); } //[-Formularz Główny-]Główny formularz $form. Struktura to kolekcja formularzy ZamowienieListType() //a zawartość to $zamowieniaList $form = $this->createForm(ZamowienieListType::class, $zamowieniaList); //[-Formularz Główny-]Jeśli w panelu zmienionio jakiś status i kliknięto zapisz to odbieram //zawartość formularza i aktualizuję bazę danych $form->handleRequest($request); if ($form->isValid()) { $em = $this->getDoctrine()->getManager(); foreach ($form->getData() as $task) { $em->merge($task); } $em->flush(); } return $this->render('AppBundle:Zarzadca:panelsort.html.twig',[ 'zamowieniaProdukty'=>$zamowieniaProdukty, 'sortArr' => $sortArr, 'form' => $form->createView(), 'EntFldName' => $EntFldName, 'query' => $query, 'Identifier' => $Identifier, 'StatusForm' => $StatusForm->createView(), 'DataZamForm' => $DataZamForm->createView(), 'NrKlientaForm' => $NrKlientaForm->createView(), ]); } //jest jeszcze kilka pomocniczych metod do powyższej akcji }