2014-01-10 3 views
1

Итак, я работаю над пользовательским приложением Sonata Admin. Я пытаюсь создать пользовательское действие для загрузки файла в контроллер, который расширяет CRUDController.Пользовательские маршруты Sonata Admin Bundle, используя аннотации

Действие:

/** 
    * @Route("/download-list/{id}", name="download_list") 
    */ 
    public function downloadListAction($id = null) { 
     $id = $this->get('request')->get($this->admin->getIdParameter()); 

     $object = $this->admin->getObject($id); 

     if (!$object) { 
      throw new NotFoundHttpException(sprintf('unable to find the object with id : %s', $id)); 
     } 
     if (false === $this->admin->isGranted('VIEW', $object)) { 
      throw new AccessDeniedException(); 
     } 

     $entity = $this->admin->getSubject(); 

     $exportFolder = $this->container->getParameter('export_folder'); 
     $filePath = $this->get('kernel')->getRootDir() . $exportFolder . DIRECTORY_SEPARATOR . $entity->createListFileName() . $this->extension; 

     $response = new BinaryFileResponse($filePath); 
     $response->headers->set('Content-Type', 'text/plain'); 
     return $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $entity->createListFileName()); 
    } 

В routing.yml я есть

spam_list_admin: 
    resource: "@SpamAdminCoreBundle/Controller/SpamListAdminController.php" 
    type: annotation 
    prefix: /list 

Маршрутизатор отладчик показывает мой маршрут, я могу генерировать Ури с помощью $this->get('router')->generate('download_list', array('id' => $id)) но если доступ к нему (app_dev.php/список/список загрузок/6) Я получаю

There is no `_sonata_admin` defined for the controller `SpamAdmin\CoreBundle\Controller\SpamListAdminController` and the current route `download_list`. 

Это сообщение очевидно Как дерьмо, какая здесь реальная сделка?

ответ

1

Маршруты для сонаты Действия CRUDController должны быть определены в вашем классе администратора.

protected function configureRoutes(RouteCollection $collection) 
{ 
    parent::configureRoutes($collection); 
    $collection->add('download_list', $this->getRouterIdParameter().'/download-list') 
} 
+0

спасибо. тем временем я заметил, что мне нужно настроить маршрут «для symfony», чтобы иметь возможность создавать uri, используя «$ this-> get (« router ») -> generate», а также «для Sonata», чтобы иметь доступ страница. –

Смежные вопросы