Hallo,
ich arbeitet gerade an einem Tabellen Frontend mit Symfony2.
Nun möchte ich die Tabelle sortieren, dass heisst, wenn ich bsw, auf die Spalte Nachnamen klicke, so sollte die Tabelle alle Nachnamen aufsteigend darstellen.
Sollte ich dannach nochmal auf die Spalte klicken, so sollten die Nachnamen absteigend präsentiert werden.
Soviel zum "Feature".
Nun zur Umsetzung....
Das umschalten sollte per $_GET realisiert werden, deswegen wollte ich folgendes Routing verwenden:
Der Controller wertet die Parameter dann aus und fetched die Tabelle je nach angefordertet Sortierung in ein array, welches dann in einem Template ausgegeben werden kann:
Hier ist die Repository:
Wie jeder sehen kann verursacht eine "einfache" Funktion so einen großen Aufwund... einen eigentlich zu großen.
Meine Frage ist nun, ob sowas auch schöner gehen kann?
Gruß
ich arbeitet gerade an einem Tabellen Frontend mit Symfony2.
Nun möchte ich die Tabelle sortieren, dass heisst, wenn ich bsw, auf die Spalte Nachnamen klicke, so sollte die Tabelle alle Nachnamen aufsteigend darstellen.
Sollte ich dannach nochmal auf die Spalte klicken, so sollten die Nachnamen absteigend präsentiert werden.
Soviel zum "Feature".
Nun zur Umsetzung....
Das umschalten sollte per $_GET realisiert werden, deswegen wollte ich folgendes Routing verwenden:
Code:
_customers: pattern: /contacts/{column}/{orderBy} defaults: { _controller: TableAppBundle:Contact:index, column: 'lastName', orderBy: 'asc' }
PHP-Code:
public function indexAction($column, $orderBy) {
$em = $this->getDoctrine()->getEntityManager();
switch ($column) {
case 'lastName':
$customers = $em->getRepository('TableAppBundle:Contact')
->findAllOrderedByLastNameAsc();
break;
case 'firstName':
$customers = $em->getRepository('TableAppBundle:Contact')
->findAllOrderedByFirstNameAsc();
break;
case 'birth':
$customers = $em->getRepository('TableAppBundle:Contact')
->findAllOrderedByBirthAsc();
break;
case 'street':
$customers = $em->getRepository('TableAppBundle:Contact')
->findAllOrderedByStreetAsc();
break;
case 'nr':
$customers = $em->getRepository('TableAppBundle:Contact')
->findAllOrderedByNrAsc();
break;
case 'zipCode':
$customers = $em->getRepository('TableAppBundle:Contact')
->findAllOrderedByZipCodeAsc();
break;
case 'email':
$customers = $em->getRepository('TableAppBundle:Contact')
->findAllOrderedByEmailAsc();
break;
case 'phone':
$customers = $em->getRepository('TableAppBundle:Contact')
->findAllOrderedByPhoneAsc();
break;
case 'mobile':
$customers = $em->getRepository('TableAppBundle:Contact')
->findAllOrderedByMobileAsc();
break;
default:
$customers = $em->getRepository('TableAppBundle:Contact')
->findAll();
break;
}
return $this->render('TableAppBundle:Contact:index.html.twig', array(
'contactss' => $contacts,
));
PHP-Code:
class CustomerRepository extends EntityRepository
{
public function findAllOrderedByLastNameAsc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.last_name ASC')
->getResult();
}
public function findAllOrderedByLastNameDesc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.last_name DESC')
->getResult();
}
public function findAllOrderedByFirstNameAsc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.firstName ASC')
->getResult();
}
public function findAllOrderedByFirstNameDesc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.firstName DESC')
->getResult();
}
public function findAllOrderedByBirthAsc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.birth ASC')
->getResult();
}
public function findAllOrderedByBirthDesc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.birth DESC')
->getResult();
}
public function findAllOrderedByStreetAsc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.street ASC')
->getResult();
}
public function findAllOrderedByStreetDesc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.street DESC')
->getResult();
}
public function findAllOrderedByNrAsc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.nr ASC')
->getResult();
}
public function findAllOrderedByNrDesc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.nr DESC')
->getResult();
}
public function findAllOrderedByZipCodeAsc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.zipCode ASC')
->getResult();
}
public function findAllOrderedByZipCodeDesc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.zipCode DESC')
->getResult();
}
public function findAllOrderedByEmailAsc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.email ASC')
->getResult();
}
public function findAllOrderedByEmailDesc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.email DESC')
->getResult();
}
public function findAllOrderedByPhoneAsc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.phone ASC')
->getResult();
}
public function findAllOrderedByPhoneDesc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.phone DESC')
->getResult();
}
public function findAllOrderedByMobileAsc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.mobile ASC')
->getResult();
}
public function findAllOrderedByMobileDesc() {
return $this->getEntityManager()
->createQuery('SELECT p FROM TableAppBundle:Contact ORDER BY p.mobile DESC')
->getResult();
}
}
Meine Frage ist nun, ob sowas auch schöner gehen kann?
Gruß
Kommentar