EC-CUBE3.0.15
Form を画面に表示することなく使用することはできますでしょうか?
帳票出力プラグインを使用して、フロントページの注文履歴詳細ページでも領収書を発行できるようにしたいと考えております。
管理者側の処理をコピーして処理を作成しているのですが、$form->isValid() 判定が false になってしまいます。
バリデーションエラーの内容を出力してみようとすると、エラーメッセージが何も出力されませんでした。
app/template/default/Mypage/history.twig
{% if Order.CustomerOrderStatus == "発送済み" %}
<dt id="detail_box__commit_date">領収書:</dt>
<dd><a href="{{ url('plugin_order_pdf_download_receipt', { orderId : Order.id }) }}">発行</a></dd>
{% 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
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); // ★ この処理は不要?
$form->get('ids')->setData($orderId);
$form->get('title')->setData('領収書');
$form->get('tyohyo_type')->setData('4');
$form->get('ryosyu_no')->setData($Order->getOrderCode());
$form->get('ryosyu_tadasi')->setData('商品代として');
// Validation
if (!$form->isValid()) { // ★ バリデーションでエラーになってしまう
log_info('The parameter is invalid!');
echo 1;
dump($form->getErrors(true)); // ★ エラーメッセージが出力されない
die;
return $app->redirect($app->url('mypage_history', array('id' => $orderId)));
}
// サービスの取得
/* @var OrderPdfService $service */
$service = $app['orderpdf.service.order_pdf'];
$arrData = $form->getData(); // ★ if (!$form->isValid()) {...} をコメントアウトしてみたところ、$arrData が null になってしまう
// 購入情報からPDFを作成する
$status = $service->makePdf($arrData);
// 異常終了した場合の処理
if (!$status) {
log_info('Unable to create pdf files! Process have problems!');
echo 2;
die;
return $app->redirect($app->url('mypage_history', array('id' => $orderId)));
}
// ダウンロードする
$response = new Response(
$service->outputPdf(),
200,
array('content-type' => 'application/pdf')
);
echo 3;
die;
// レスポンスヘッダーに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の機能やデザインのカスタマイズ承ります。