2016-11-28 2 views
-1

Я следил за учебником о knpsnappybundle, чтобы использовать pdf в symfony3, но проблема в том, что мне нужно передать массив значений на страницу pdf, чтобы я мог получить полную страницу, такую ​​как оригинальная.Проблемы с созданием PDF Symfony 3

здесь контроллер:

public function pdfAction(){ 
    $html = $this->renderView('@Recommendation/Recommendation/payment-successful.html.twig'); 

    $filename = sprintf('test.pdf', date('Y-m-d')); 

    return new Response(
     $this->get('knp_snappy.pdf')->getOutputFromHtml($html), 
     200, 
     [ 
      'Content-Type'  => 'application/pdf', 
      'Content-Disposition' => sprintf('inline; filename="%s"', $filename), 

     ] 
    ); 

} 

здесь картина нормальной страницы с кодом кнопки PRINT:

<a href="{{ path('payment_pdf') }}"><button>PRINT</button></a> 

и маршрут:

payment_pdf: 
path:  /payment_pdf 
defaults: { _controller: "RecommendationBundle:Recommendation:pdf"} 

фотография моей исходной страницы: https://i.stack.imgur.com/3MBEt.png

и теперь картина PDF генерироваться: https://i.stack.imgur.com/rqs2x.png

вы видите, что таблица пуста!

жаль не может отображать изображения

файл веточка:

<head> 
 
    <script type="text/javascript" src="http://yourjavascript.com/12191816011/success.js"></script> 
 
    <link rel="shortcut icon" href="http://www.iconj.com/ico/f/k/fksvrhslsa.ico" type="image/x-icon" /> 
 
    <script type="text/javascript" src="http://yourjavascript.com/11396113712/jquery-ajax-deprecated-dimensions-effects-offset-wrap-min.js"></script> 
 

 
    <link href="https://dl.dropboxusercontent.com/s/6dgxerbf1p6p8zl/styles.css" rel="stylesheet" type="text/css"> 
 
</head> 
 

 
<html> 
 

 

 
<div class="pf-checkout-container pf-success-page"> 
 
    <h1 class="pf-green">Payment Successful</h1> 
 
    <p class="pf-processed-msg">Your payment has been processed! Details of the transaction are included below:</p> 
 
    <div class="pf-total-col"> 
 
     <span class="pf-total-paid">Amount Paid</span> 
 
     <div class="pf-total-wrapper"> 
 
      <span class="pf-total-label">Total:</span> 
 
      <span class="pf-total-amount pf-green" id="pf-total-amount">$00.00</span> 
 
     </div> 
 
    </div> 
 

 
    <div class="pf-success-details"> 
 
     <p>Thank you for your purchase. Be sure to check us out on Facebook & Twitter!</p> 
 
     <div class="pf-success-info"> 
 
      <ul> 
 
       <li> 
 
        <span class="pf-value-name">Name:</span> 
 
        <span id="pf-full-name" class="pf-value">{{ app.user.username }}</span> 
 
       </li> 
 

 
       <li> 
 
        <span class="pf-value-name">Auth Code:</span> 
 
        <span class="pf-value">{{app.user.salt}}</span> 
 
       </li> 
 
      </ul> 
 
      <br> 
 
      <br> 
 
      <table width="100%" border="1" cellpadding="10" style="font-family:'Myriad Pro' "> 
 

 
       <tr> 
 
        <th width="43%" align="left">Product Name</th> 
 
        <th width="10%">Unit Price</th> 
 
        <th width="10%">Quantity</th> 
 
        <th width="12%">Total</th> 
 
       </tr> 
 

 
       {% if livres is defined %} 
 
        {% for l in livres %} 
 
         <tr bgcolor="#FFFFFF" class=" product-detail"> 
 
          <td valign="top">{{ l.titre }}</td> 
 
          <td align="center" valign="top">{{ l.prix }} DT</td> 
 
          <td align="center" valign="top">{{ l.quantite}}</td> 
 
          <td align="center" valign="top">{{ l.prix}} DT</td> 
 
         </tr> 
 

 

 
        {% endfor %} 
 
       {% endif %} 
 

 
      </table> 
 
     </div> 
 
     <!-- | PUT YOUR COMPANY LOGO HERE | --> 
 

 
     <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> 
 
    </div> 
 
    <div class="pf-payment-buttons"> 
 
     <!-- | PUT YOUR LINK HERE | --> 
 
     <button>Back to Store</button> 
 

 
     <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --> 
 
    </div> 
 

 
    <a href="{{ path('payment_pdf') }}"><button>PRINT</button></a> 
 

 
    <div class="pf-footer"> 
 

 
      <img src="https://stripe.com/img/v3/home/social.png" /> 
 

 
    </div> 
 
</div> 
 
</html>

Мой Полный файл Контроллер:

class RecommendationController extends Controller 

{

public function afficheAction() 
{ 


    $em = $this->getDoctrine()->getManager(); 
    $recommendation = $em->getRepository("MainBundle:Recommendation")->findAll(); 
    return $this->render("RecommendationBundle:Recommendation:book_detail.html.twig", array('recom' => $recommendation)); 
} 

public function afficheparidAction($id) 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $em1 = $this->getDoctrine()->getManager(); 


    $livre = $em->getRepository('MainBundle:Livre')->find($id); 
    $recommendation = $em1->getRepository('MainBundle:Recommendation')->findAll(); 


    return $this->render('RecommendationBundle:Recommendation:book_detail.html.twig', array(
     'livre' => $livre, 'recom' => $recommendation 
    )); 
} 


public function AjoutAction($id) 
{ 
    $user = $this->getUser(); 
    $em = $this->getDoctrine()->getManager(); 
    $livre = $em->getRepository('MainBundle:Livre')->find($id); 
    $rec = new Recommendation(); 
    if (isset($_POST['review'])) { 
     $rec->setIdUtilisateur($user); 
     $rec->setContenu($_POST['review']); 
     $rec->setIdLivre($livre); 
     $em->persist($rec); 
     $em->flush(); 

// вернуть $ this-> redirectToRoute ("рекомендация_bookid"); return $ this-> redirect ($ this-> generateUrl ('рекомендация_new', массив ('id' => $ id)));

} 
    $em1 = $this->getDoctrine()->getManager(); 
    $recommendation = $em1->getRepository('MainBundle:Recommendation')->findAll(); 
    return $this->render("RecommendationBundle:Recommendation:new_rec.html.twig", array('livre' => $livre, 'id' => $id, 'recom' => $recommendation)); 


} 


public function DeleteAction($id_r, $id_l) 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $rec = $em->getRepository('MainBundle:Recommendation')->find($id_r); 
    $livre = $em->getRepository('MainBundle:Livre')->find($id_l); 
    $em->remove($rec); 
    $em->flush(); 
    $em1 = $this->getDoctrine()->getManager(); 

    return $this->redirect($this->generateUrl('recommendation_new', array('livre' => $livre, 'id' => $livre->getId()))); 
} 


public function UpdateAction($id_r,$id_l) 
{ 
    $user = $this->getUser(); 
    $em = $this->getDoctrine()->getManager(); 
    $rec = $em->getRepository('MainBundle:Recommendation')->find($id_r); 
    $em->remove($rec); 
    $em->flush(); 
    $livre = $em->getRepository('MainBundle:Livre')->find($id_l); 


    if (isset($_POST['review'])) { 
     $rec->setId($id_r); 
     $rec->setIdUtilisateur($user); 
     $rec->setContenu($_POST['review']); 
     $rec->setIdLivre($livre); 
     $em->persist($rec); 
     $em->flush(); 

     return $this->redirect($this->generateUrl('recommendation_new', array('id' => $id_l))); 
} 
} 


public function FindAction($id_l,$id_r) 
{ 

    $em = $this->getDoctrine()->getManager(); 
    $em1 = $this->getDoctrine()->getManager(); 


    $rec = $em->getRepository('MainBundle:Recommendation')->find($id_r); 
    $livre = $em1->getRepository('MainBundle:Livre')->find($id_l); 


    return $this->render('RecommendationBundle:Recommendation:edit_rec.html.twig', array('rec' => $rec, 'livre' =>$livre)); 

} 

public function bookAction() 
{ 
    return $this->render('RecommendationBundle:Recommendation:book_detail.html.twig'); 
} 




public function cartAction($id) 
{if (!isset($_SESSION['cart'])){ 
    $_SESSION['cart']=array();} 

    $em = $this->getDoctrine()->getManager(); 
    $livre = $em->getRepository('MainBundle:Livre')->find($id); 
    // if (isset($_SESSION['book'])) { 
     $_SESSION['cart'][$id] = $livre; 


    $cart=$_SESSION['cart']; 

возвращение $ this-> Render ('RecommendationBundle: Рекомендация: cart.html.twig', массив ('ID' => $ ID, 'ливров' => $ телега));

} 

public function emptycartAction() 
{ 
    //if (isset($_SESSION['cart'])) { 
    $_SESSION['cart'] = array(); 
    $cart=$_SESSION['cart']; 


    return $this->render('RecommendationBundle:Recommendation:cart.html.twig',array('livres'=>$cart)); 

}

public function removebookcartAction($id) 
{ 
    // {if (isset($_SESSION['cart'])){ 


    unset($_SESSION['cart'][$id]); 
    $cart=$_SESSION['cart']; 
    // return $this->redirect($this->generateUrl('recommendation_cart_affiche', array('livres' => $cart))); 

возвращение $ this-> redirectToRoute ('recommendation_cart_show', массив ('ливров' => $ телега)); // вернуть $ this-> render ('РекомендацияBundle: Рекомендация: cart.html.twig ', array (' id '=> 1,' livres '=> $ cart));

} 

public function showAction(){ 
    // if(!empty($_SESSION['cart'])) 
    $livres=$_SESSION['cart']; 
    return $this->render('RecommendationBundle:Recommendation:cart.html.twig',array('livres'=>$livres)); 


} 
public function okAction($cart){ 
    $cart=$_SESSION['cart']; 


    return $this->render('RecommendationBundle:Recommendation:payment-successful.html.twig',array('livres'=>$cart)); 

}

public function pdfAction($cart){ 
    // $cart=$_SESSION['cart']; 
    $html = $this->renderView('@Recommendation/Recommendation/payment_pdf.html.twig',array('livres'=>$cart)); 

    $filename = sprintf('test.pdf', date('Y-m-d')); 

    return new Response(
     $this->get('knp_snappy.pdf')->getOutputFromHtml($html), 
     200, 
     [ 
      'Content-Type'  => 'application/pdf', 
      'Content-Disposition' => sprintf('inline; filename="%s"', $filename), 
     ] 
    ); 

} 

Мои маршруты:

recommendation_bookid: путь:/book_detail/{идентификатор} по умолчанию: {_controller: "RecommendationBundle: Рекомендация: afficheparid"} рекомендация_book: путь:/book_detail defaults: {_controller: "РекомендацияBundle: Recom mendation: Affiche»} recommendation_new: путь:/book_detail/{ID}/новые по умолчанию: {_controller: "RecommendationBundle: Рекомендация: Ajout"} recommendation_delete: путь:/book_detail/{id_l}/{id_r}/удалить по умолчанию: {_controller: "RecommendationBundle: Рекомендация: Удалить"} recommendation_edit: путь:/book_detail/{id_l}/{id_r}/редактировать по умолчанию: {_controller: "RecommendationBundle: Рекомендация: Обновить"} recommendation_find: путь:/book_detail/{id_l}/{id_r}/find defaults: {_controller: "РекомендацияBundle: Рекомендация: Найти"} рекомендация_cart: путь:/book_detail/{ID}/корзина по умолчанию: {_controller: "RecommendationBundle: Рекомендация: В корзину"} recommendation_empty: путь:/emptycart по умолчанию: {_controller: "RecommendationBundle: Рекомендация: emptycart"} recommendation_cart_remove: путь:/remove_book/{ID} по умолчанию: {_controller: "RecommendationBundle: Рекомендация: removebookcart"} recommendation_cart_show: путь:/remove_book по умолчанию: {_controller: "RecommendationBundle: Рекомендация: показать"} payment_ok: путь :/payment_success defaults: {_controller: "РекомендацияBundle: Рекомендация на: ОК "}

payment_pdf: путь:/payment_pdf по умолчанию: {_controller: "RecommendationBundle: Рекомендация: pdf"}

+0

Что нажав на 'PRINT' шоу? –

+0

он показывает pdf-страницу , она берет меня на маршрут payment_pdf, который имеет действие для создания страницы pdf, как указано выше. –

+0

Можете ли вы показать свой файл twig 'payment-successful.html.twig' до и после внесенных изменений. Или текущий, если у вас нет старого. –

ответ

0

Хорошо, я думаю, что все, что вам нужно сделать, это пройти в ваш livres переменная от контроллера. Я не знаю, как это называется, может быть, $livres?

Так как это:

public function pdfAction(){ 
    $html = $this->renderView('@Recommendation/Recommendation/payment-successful.html.twig', array(
     'livres' => $livres 
    )); 

    $filename = sprintf('test.pdf', date('Y-m-d')); 

    return new Response(
     $this->get('knp_snappy.pdf')->getOutputFromHtml($html), 
     200, 
     [ 
      'Content-Type'  => 'application/pdf', 
      'Content-Disposition' => sprintf('inline; filename="%s"', $filename), 
     ] 
    ); 
} 

Я думаю, что должен это сделать.

+0

К сожалению, вам может понадобиться передать 'livres' в качестве параметра к маршруту' pdfAction'. Я не уверен, как вы хотите, чтобы ваш контроллер работал. –

+0

я сделал передать ливров в корзину, как это: и в контроллере я сделал то, что у меня сказал: общественная функция pdfAction ($ телега) { $ HTML = $ this-> RenderView ('@ Рекомендации/Рекомендации /payment-successful.html.twig ', array ( ' livres '=> $ cart )); Я прав? Но он не работает, я получаю пустой стол, как обычно –

+0

Затем вы можете попробовать URL отладки, добавив «app_dev.php» к URL-адресу. Также сделайте сброс 'livres', как это в twig: {{dump (livres)}}, и посмотрите, пуст ли он. Свалка даст 500 ошибок в производстве - просто давая вам знать. –

0

Прочитайте это: https://symfony.com/doc/current/components/http_foundation/sessions.html

Это сеансы должны быть сделаны в Symfony. Вам нужно изменить некоторые вещи ...

+0

У меня нет проблем с моими сеансами, массив $ _session работает весело! но в редакции ничего не посылает !! в контроллере нет команды, которая отправляет значения, только получает вид –

+0

Но $ cart пуст! так что что-то еще не так. Предложите вам понять это! Я не могу помочь, пока вы не попробуете что-нибудь. –

+0

Okey большое спасибо :) –

-1

ИСПРАВЛЕНО:

я не нужно передать массив в качестве параметра! Я просто объявил переменную вроде этого: $ cart = $ _SESSION ['cart'] ($ _SESSION ['cart'] - это массив, который я использую для хранения моих варов) в моем pdfController и передать его напрямую: $ html = $ this-> renderView ('@ Рекомендация/Рекомендация/payment-pdf.html.twig', массив ( 'livres' => $ cart ));

Я работаю с массивом таким образом он считается как глобальной переменной :)

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