Sonata Admin Bundle - Создать PDF из списка - PullRequest
0 голосов
/ 29 сентября 2019

поэтому здесь я нахожусь перед ситуацией, которую я не могу решить, я пытаюсь добавить в свой CRM генератор PDF, который будет отображать данные, показанные в списке.

Я пытался изменитьдействия сонаты, добавив действия в формате pdf к уже существующим (показать, редактировать, удалить), но я не думаю, что это лучший способ сделать это.

Я просто хотел бы знать, как можноУ меня есть кнопка, которая будет непосредственно генерировать новую страницу с данными этого списка.

class OfferAdmin extends AbstractAdmin
{
    protected $baseRouteName = 'simple-offer';
    protected $baseRoutePattern = 'simple-offer';
    protected $translationDomain = 'sonata'; // default is 'messages'
    protected $datagridValues = [

        // display the first page (default = 1)
        '_page' => 1,

        // reverse order (default = 'ASC')
        '_sort_order' => 'DESC',

        // name of the ordered field (default = the model's id field, if any)
        '_sort_by' => 'id',
    ];

    public $supportsPreviewMode = true;

    protected function configureRoutes(RouteCollection $collection)
    {
        $collection->add('pdf', $this->getRouterIdParameter().'/pdf');
    }
protected function configureListFields(ListMapper $listMapper)
    {

        $listMapper
            ->add('name', null, array('label' => 'Référence', 'show_filter' => true))
            ->add('contact', null, array('label' => 'Contact'))
            ->add('status',null,array('label' => 'Statut'))
//            ->add('stock',null,array('label' => 'Stock','show_filter' => true))
            ->add('product_cat',null,array('label' => 'Catégorie Produit','show_filter' => true))
            ->add('product',null,array('label' => 'Produit','show_filter' => true))
            //->add('stock',null,array('label' => 'Stock','show_filter' => true))
            ->add('date',null,array('label' => "Date d'emission l'offre", 'required' => true))
            ->add('expireDate',null,array('label' => "Date d'expiration",'show_filter' => true))
            ->add('expired',null,array('label' => "Expirée",'show_filter' => true))
            ->add('accepted',null,array('label' => "Acceptée",'show_filter' => true))
            ->add('_action', 'actions', [
                'actions' => [
                    'edit' => [],
                    'pdf' => [
                        'template' => '@SonataAdmin/CRUD/list__action_pdf.html.twig'
                    ],
                ],
            ]);
        ;

        $todayDate =  date ( 'Y-m-d H:i:s');

        $em    = $this->modelManager->getEntityManager('App\Entity\Offer');
        $qb = $em->createQueryBuilder();
        $q = $qb->update('App\Entity\Offer', 'o')
            ->set('o.expired', "1")
            ->where("o.expireDate < '$todayDate'")
            ->getQuery();
        $q->execute();

    }

Вот представление, которое генерирует кнопку, показанную в списке

{# @SonataAdmin/CRUD/list__action_entity_board.html.twig #}
{% if admin.isGranted('VIEW', object) and admin.hasRoute('show') %}
    <a href="{{ admin.generateObjectUrl('pdf', object) }}" class="btn btn-sm btn-default">
        <i class="fa fa-file-pdf-o"></i>
        PDF
    </a>
{% endif %}

В любом случаеЯ не уверен, что это правильный способ сделать это с самого начала.Теперь вот список, как это выглядит

введите описание изображения здесь

Как видите, у меня есть кнопка PDF, и она правильно перенаправляет меня, когда я нажимаю на нее, ноон генерирует сообщение об ошибке, в котором говорится, что метод pdfAction не существует.

Вот экран с URL, так что я немного проверил, как работают редактирование и удаление, и я не думаю, что все равно на правильном пути.

введите описание изображения здесь

Может кто-нибудь объяснить мне, как получить кнопку для каждого списка, который будет генерировать новую страницу с данными определенной?Большое спасибо

...