k-yamamura 様
ありがとうございます!
こんな記事を書いておられたのですね。
なるほど、arrData をパラメーターに渡せばいいので、Form を使わなくてもよかったのですね。。
目からウロコです。
ただ、ご回答いただいて大変恐縮なのですが、こちらどうしてもエラーが解消できなかったので、注文履歴詳細画面に form をレンダリングすることで自力で解決いたしました。
ご提示いただいた実装より効率悪いですが。。
src/Eccube/Controller/Mypage/MypageController.php
// 帳票出力
$pdf_builder = $app['form.factory']->createBuilder('admin_order_pdf');
$pdf_form = $pdf_builder->getForm();
$pdf_form->get('ids')->setData($id);
$pdf_form->get('issue_date')->setData(new \DateTime());
$pdf_form->get('title')->setData('領収書');
$pdf_form->get('message1')->setData('このたびはお買上げいただきありがとうございます。');
$pdf_form->get('message2')->setData('下記の内容にて納品させていただきます。');
$pdf_form->get('message3')->setData('ご確認くださいますよう、お願いいたします。');
$pdf_form->get('note1')->setData('');
$pdf_form->get('note2')->setData('');
$pdf_form->get('note3')->setData('');
$pdf_form->get('comment1')->setData('下記の通り、お見積り申し上げます。');
$pdf_form->get('comment2')->setData('納入期限:注文後1週間以内');
$pdf_form->get('comment3')->setData('納入場所:御社指定');
$pdf_form->get('comment4')->setData('支払条件:末〆翌月末振込');
$pdf_form->get('comment5')->setData('有効期限:30日');
$pdf_form->get('seikyu1')->setData('このたびはお買上げいただきありがとうございます。');
$pdf_form->get('seikyu2')->setData('下記の内容にてご請求させていただきます。');
$pdf_form->get('seikyu3')->setData('ご確認くださいますよう,お願いいたします。');
$pdf_form->get('tyohyo_type')->setData('4');
$pdf_form->get('ryosyu_no')->setData($Order->getOrderCode());
$pdf_form->get('ryosyu_show')->setData('2');
$pdf_form->get('ryosyu_tadasi')->setData('商品代として');
return $app->render('Mypage/history.twig', array(
'Order' => $Order,
'pdf_form' => $pdf_form->createView(),
));
app/template/default/Mypage/history.twig
{% if Order.CustomerOrderStatus == "発送済み" %}
<div id="detail_box" class="row">
<div id="detail_box__commit_date"></dt>
<form role="form" name="order_pdf_form" id="order_pdf_form" method="post" action="{{ url('plugin_order_pdf_download_receipt', { orderId : Order.id }) }}">
<div class="btn_group col-sm-4">
<button class="btn btn-info btn-block" onclick="document.order_pdf_form.submit();">領収書発行
</button>
</div>
<span style="display:none;">{{ form_rest(pdf_form) }}</span>
</form>
</div>
</div>
{% endif %}
app/Plugin/OrderPdf/ServiceProvider/OrderPdfServiceProvider.php
// 領収書PDFファイルダウンロード
$app->match('/mypage/history/download_receipt/{orderId}', '\\Plugin\\OrderPdf\\Controller\\OrderPdfController::download_receipt')
->bind('plugin_order_pdf_download_receipt')->assert('orderId', '\d+');
app/Plugin/OrderPdf/Controller/OrderPdfController.php
/**
* フロントのマイページ購入履歴詳細で領収書発行ボタンクリック時の処理
* 領収書のPDFをダウンロードする.
*
* @param Application $app
* @param Request $request
*
* @return Response
*
* @throws BadRequestHttpException
*/
public function download_receipt(Application $app, Request $request, $orderId)
{
$Order = $app['eccube.repository.order']->find($orderId);
if ($Order == null) {
throw new BadRequestHttpException();
}
/**
* @var FormBuilder $builder
*/
$builder = $app['form.factory']->createBuilder('admin_order_pdf');
/* @var Form $form */
$form = $builder->getForm();
$form->handleRequest($request);
// Validation
if (!$form->isValid()) {
log_info('The parameter is invalid!');
return $app->redirect($app->url('mypage_history', array('id' => $orderId)));
}
// サービスの取得
/* @var OrderPdfService $service */
$service = $app['orderpdf.service.order_pdf'];
$arrData = $form->getData();
// 購入情報からPDFを作成する
$status = $service->makePdf($arrData);
// 異常終了した場合の処理
if (!$status) {
log_info('Unable to create pdf files! Process have problems!');
return $app->redirect($app->url('mypage_history', array('id' => $orderId)));
}
// ダウンロードする
$response = new Response(
$service->outputPdf(),
200,
array('content-type' => 'application/pdf')
);
// レスポンスヘッダーにContent-Dispositionをセットし、ファイル名をreceipt.pdfに指定
$response->headers->set('Content-Disposition', 'attachment; filename="'.$service->getPdfFileName().'"');
log_info('ReceiptPdf download success!', array('Order ID' => implode(',', $this->getIds($request))));
return $response;
}
----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。