2017-02-13 13 views

ответ

2

Перейдите в нужный список. Скопируйте URL из браузера:

Теперь с JQuery:

$.get(url_you_just_copied, function(result){ 
    console.log(result); 
}; 

Посмотрите на то, что вы получаете обратно от вызова listAction и адаптируют параметры запроса (фильтры, ...) соответственно получите список, который вы хотели.

Следующих иметь чистое решение, вам необходимо сгенерировать свой адрес с помощником веточки: https://stackoverflow.com/a/15857401/5758328

+0

Да, позвонив по списку через вызов ajax, я получил данные с помощью шаблона ajax, которым я могу управлять дисплеем. благодаря – fliim

0

Вот как я сделал это с помощью sonataBlockBundle для отображения списка писем:

класс Блок обслуживания:

namespace Librinfo\EmailBundle\Block; 

use Doctrine\ORM\EntityManager; 
use Librinfo\EmailBundle\Entity\Email; 
use Sonata\BlockBundle\Block\BlockContextInterface; 
use Sonata\BlockBundle\Block\Service\TextBlockService; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
use Symfony\Component\HttpFoundation\Response; 

class EmailsListBlock extends TextBlockService 
{ 
    /** 
    * @var EntityManager 
    */ 
    protected $manager; 

    /** 
    * @param EntityManager $manager 
    */ 
    public function setManager(EntityManager $manager) { 
     $this->manager = $manager; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function execute(BlockContextInterface $blockContext, Response $response = null) 
    { 
     $settings = $blockContext->getSettings(); 
     $targetEntity = $settings['target_entity']; 
     $maxResults = $settings['max_results']; 
     $emails = $this->getEmails($targetEntity, $maxResults); 

     return $this->renderResponse($blockContext->getTemplate(), array(
      'block' => $blockContext->getBlock(), 
      'settings' => $settings, 
      'emails' => $emails, 
     ), $response); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function configureSettings(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'content' => 'Insert your custom content here', 
      'template' => 'LibrinfoEmailBundle:Block:block_emails_list.html.twig', 
      'target_entity' => null, 
      'max_results' => 20, 
     )); 
    } 

    /** 
    * @param object $targetEntity 
    * @param int $maxResults 
    * @return array 
    * @throws \Exception 
    */ 
    private function getEmails($targetEntity, $maxResults) 
    { 
     if (!$targetEntity || !is_object($targetEntity)) 
      return []; 
     $rc = new \ReflectionClass($targetEntity); 
     if (!$rc->hasProperty('emailMessages')) 
      return []; 

     $repo = $this->manager->getRepository($rc->getName()); 
     if (method_exists($repo, 'getEmailMessagesQueryBuilder')) { 
      $qb = $repo->getEmailMessagesQueryBuilder($targetEntity->getId()); 
     } 
     else { 
      $repo = $this->manager->getRepository(Email::class); 
      $targets = strtolower($rc->getShortName()) . 's'; // ex. contacts 
      $qb = $repo->createQueryBuilder('e') 
       ->leftJoin('e.'.$targets, 't') 
       ->where('t.id = :targetid') 
       ->setParameter('targetid', $targetEntity->getId()) 
      ; 
     } 
     $qb->orderBy('e.updatedAt', 'desc') 
      ->setMaxResults($maxResults); 

     return $qb->getQuery()->getResult(); 
    } 


} 

Определение сервиса:

librinfo.email.block.emails_list: 
     class: Librinfo\EmailBundle\Block\EmailsListBlock 
     arguments: 
      - librinfo.email.block.emails_list 
      - '@templating' 
     calls: 
      - [setManager, [@doctrine.orm.entity_manager]] 
     tags: [{ name: sonata.block }] 

и шаблон (сокращенно)

{% extends sonata_block.templates.block_base %} 

{% block block %} 
    <table class="table table-bordered table-striped sonata-ba-list emails-history"> 
     <thead> 
      <tr> 
       <th>Expéditeur</th> 
       <th>Destinataires</th> 
       <th>Objet</th> 
       <th>Envoyé</th> 
       <th>Date</th> 
       <th>Actions</th> 
      </tr> 
     </thead> 
     <tbody> 
      {% for email in emails %} 
       <tr data-email-id="{{ email.id }}"> 
then use it like this in your edit template: 

    {{ sonata_block_render({'type': 'librinfo.email.block.emails_list'}, {'target_entity': object}) }} 
+0

Я хотел бы использовать то же DataGrid визуализации стиля как страницы просмотра списка администратора, чтобы избежать, чтобы переопределить шаблон снова. – fliim

+0

Использовать вторую технику, которую я предложил, тогда это должно быть довольно просто. – Mawcel

+0

Это то, что я ищу. Можно включить контроллер страницы списка на мою страницу редактирования, которая содержит только файл данных? – fliim