Advertisement
leonbobster

Silex Crud Controller

Oct 30th, 2014
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.74 KB | None | 0 0
  1. <?php
  2.  
  3. use Extensions\EntityCollection;
  4. use Extensions\Crud;
  5. use Extensions\Entity;
  6. use Extensions\CrudEntity;
  7. use Extensions\ArchiveInterface;
  8.  
  9. $app->match('/unit/edit/{entityClass}/{id}', function ($entityClass, $id) use ($app, $_CONFIG)
  10. {
  11.     $entity = Crud::createEntity($entityClass, $id);
  12.     $form = $entity->getForm();
  13.     $form->handleRequest($app['request']);
  14.     if($form->isValid()) {
  15.         $entity->populateByForm($form)->save();
  16.         return $app->redirect(Crud::redirect($entity->getUserFriendlyUrl()));
  17.     }
  18.     $formTemplate = 'crud/' . $entityClass . '/form.twig';
  19.     $formTemplate = file_exists(ROOT . '/tpl/' . $formTemplate)
  20.             ? $formTemplate
  21.             : 'crud/form.twig';
  22.     return Crud::renderContainer(
  23.         $app['twig']->render(
  24.             $formTemplate,
  25.             array (
  26.                 'form'      => $form->createView(),
  27.                 'formTitle' => $entity->getFormTitle()
  28.             )
  29.         )
  30.     );
  31. })
  32.         ->value('id', null);
  33.  
  34. $app->get('/unit/remove/{entityClass}/{id}', function ($entityClass, $id) use ($app, $_CONFIG)
  35. {
  36.     Crud::createEntity($entityClass, $id)->remove();
  37.     return $app->redirect(Crud::redirect('/unit/list/' . $entityClass));
  38. });
  39.  
  40. foreach(CrudEntity::$registeredEntities as $entityClass)
  41. {
  42.     $app->get('/' . $entityClass . 's/{page}', function ($page) use ($app, $_CONFIG, $entityClass)
  43.     {
  44.         $perPage = 10;
  45.         $collection = EntityCollection::create(Crud::dashed2camel($entityClass));
  46.         $entities = $collection->populateFromDb(
  47.             $page,
  48.             $perPage,
  49.             $collection->createNewEntity()->getDefaultSearchParams(),
  50.             array(
  51.                 'position' => 1
  52.             )
  53.         )->toArray();
  54.         $unitListTemplate = 'crud/' . $entityClass . '/list.twig';
  55.         $listTemplate = file_exists(ROOT . '/tpl/' . $unitListTemplate)
  56.                 ? $unitListTemplate
  57.                 : 'crud/list.twig';
  58.         $pagerLength = 5;
  59.         $pageTotal = $collection->getPages($perPage);
  60.         if($pagerLength < $pageTotal) {
  61.             $pagerLength = $pageTotal;
  62.         }
  63.         return Crud::renderContainer(
  64.             $app['twig']->render(
  65.                 $listTemplate,
  66.                 array (
  67.                     'entities'      => $entities,
  68.                     'rowTemplate'   => 'crud/' . $entityClass . '/row.twig',
  69.                     'pages'         => $pageTotal,
  70.                     'current_page'  => $page,
  71.                     'entityClass'   => $entityClass,
  72.                     'pagerLength'   => $pagerLength,
  73.                     'pageTitle'     => $collection->createNewEntity()->getListTitle(),
  74.                     'tableHeader'   => 'crud/' . $entityClass . '/table-header.twig'
  75.                 )
  76.             )
  77.         );
  78.     })
  79.     ->value('page', 1)
  80.     ->assert('page', '\d+');;
  81.    
  82.     $app->get('/' . $entityClass . '/{url}', function ($url) use ($app, $_CONFIG, $entityClass)
  83.     {
  84.         $entity = Entity::create(Crud::dashed2camel($entityClass));
  85.         $data = $entity->findByUrl($url);
  86.         if(! $data) {
  87.             $app->abort(404, 'Entity not found');
  88.         }
  89.         $entity->setData($data);
  90.         return Crud::renderContainer(
  91.             $app['twig']->render(
  92.                 'crud/' . $entityClass . '/show.twig',
  93.                 array(
  94.                     'entity' => $entity
  95.                 )
  96.             ), $entity
  97.         );
  98.     });
  99.    
  100.     $app->get('/' . $entityClass . 's/archive/{page}', function ($page)
  101.             use ($app, $entityClass)
  102.     {
  103.         $entity = Entity::create(Crud::dashed2camel($entityClass));
  104.         if(! $entity instanceof ArchiveInterface) {
  105.             $app->abort(500, 'Invalid archived entity');
  106.         }
  107.         $pagination = $entity->getArchivePagination($page);
  108.         $entities = $pagination->getEntities($entity->getArchivedSearchCriteria());
  109.         return Crud::renderContainer(
  110.             $app['twig']->render(
  111.                 'crud/' . $entityClass . '/list.twig',
  112.                 array (
  113.                     'entities'      => $entities,
  114.                     'rowTemplate'   => 'crud/' . $entityClass . '/row.twig',
  115.                     'pages'         => $pagination->getCountPages(),
  116.                     'current_page'  => $pagination->getCurrentPage(),
  117.                     'entityClass'   => $entityClass,
  118.                     'pagerUrl'      => $pagination->getUrl(),
  119.                     'pagerLength'   => $pagination->getPagerLength(),
  120.                     'pageTitle'     => $entity->getArchivePageTitle(),
  121.                     'tableHeader'   => 'crud/' . $entityClass . '/table-header.twig'
  122.                 )
  123.             )
  124.         );
  125.     })
  126.     ->value('page', 1);
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement