поэтому здесь я нахожусь перед ситуацией, которую я не могу решить, я пытаюсь добавить в свой 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, так что я немного проверил, как работают редактирование и удаление, и я не думаю, что все равно на правильном пути.
введите описание изображения здесь
Может кто-нибудь объяснить мне, как получить кнопку для каждого списка, который будет генерировать новую страницу с данными определенной?Большое спасибо