在条件条件下使用 milon 和 laravel 生成一些条形码时出错

Posted

技术标签:

【中文标题】在条件条件下使用 milon 和 laravel 生成一些条形码时出错【英文标题】:Get error when generate some barcodes using milon and laravel with if conditional 【发布时间】:2022-01-17 10:27:43 【问题描述】:

我想在使用基于数字长度的if条件生成条形码时寻求解决方案。

    如果我用下面这样的代码生成条形码,结果绝对没有问题。

     <?php $i = 1; ?>
     @foreach ($produks as $item)
    
         @if ($i <= 5)
             <div class="box">
                 <div class="title"> $item['nama'] </div>
    
                  DNS1D::getBarcodehtml($item['sku'], 'EAN13') 
    
                 <div class="sku"> $item['sku'] </div>
             </div>
             <?php $i++; ?>
         @else
             <div style="clear: both"></div>
             <?php $i = 1; ?>
         @endif
    
    
     @endforeach
    

    但如果我在其中使用带有 strlen 的“if conditional”,就会出错。我想根据数字的长度打印条码

     @foreach ($produks as $item)
         @if ($i <= 5)
             <div class="box">
                 <div class="title"> $item['nama'] </div>
    
                 @if (strlen($item['sku']) == 12)
                      DNS1D::getBarcodeHTML($item['sku'], 'UPCA') 
                 @else
                      DNS1D::getBarcodeHTML($item['sku'], 'EAN13') 
                 @endif
    
                 <div class="sku"> $item['sku'] </div>
             </div>
             <?php $i++; ?>
         @else
             <div style="clear: both"></div>
             <?php $i = 1; ?>
         @endif
     @endforeach
    

    这是我的 ajax 帖子

     $('#barcode').click(function() 
                 var rows_selected = $('#dt-produk').DataTable().column(12).checkboxes.selected();
                 var id = [];
                 $.each(rows_selected, function(index, rowId) 
                     id.push(rowId);
                 );
    
                 var datax = JSON.stringify(id);
                 $.ajax(
                     url: " route('cetakBarcode.produk') ",
                     type: "post",
                     data: 
                         id: datax
                     ,
                     xhrFields: 
                         responseType: 'blob'
                     ,
                     success: function(response) 
                         var blob = new Blob([response]);
                         var link = document.createElement('a');
                         link.href = window.URL.createObjectURL(blob);
                         link.download = "barcode-produk.pdf";
                         link.click();
                     ,
                     error: function(blob) 
                         console.log(blob);
                     
                 )
    
             );
    

    这是控制器

      function cetakBarcode(Request $req)
         
             $ids = json_decode(stripslashes($req->id));
             $datax = [];
             foreach ($ids as $id) 
                 $produk = DB::table('produks')->where('id', $id)->first();
                 $datax[] = [
                     'nama' => $produk->nama,
                     'harga_jual' => $produk->harga_jual,
                     'sku' => $produk->sku
                 ];
             
             $datax = [
                 'title' => 'Label Produk',
                 'date' => date('m/d/Y'),
                 'produks' => $datax
             ];
    
             $pdf = PDF::loadView('pages.master.produk.barcode', $datax);
             $path = public_path('file/pdf');
             $fileName =  'barcode-produk.' . 'pdf';
             $pdf->save($path . '/' . $fileName);
    
             $pdf = public_path('file/pdf/' . $fileName);
    
             return response()->download($pdf);
         
    

错误是 500(内部服务器错误)

【问题讨论】:

当您询问有关堆栈溢出的问题时,请在问题中提供代码,而不是其他服务,而不是图像。原因是如果有人要搜索相同的问题并且第三方服务不再存在或已删除您的图片。 好的,谢谢您,先生 【参考方案1】:

所以我刚刚使用这个库运行了一些测试,如果值的格式不正确,它会抛出一些异常,因为你在刀片视图中运行它,你将不得不使用@phpeg

 @php
    try 
        if (strlen($item['sku']) == 12) 
            echo DNS1D::getBarcodeHTML($item['sku'], 'UPCA');
         else 
            echo DNS1D::getBarcodeHTML($item['sku'], 'EAN13');
        
     catch (\Milon\Barcode\WrongCheckDigitException $e) 
        echo $e->getMessage();
    
@endphp

【讨论】:

提前感谢您的帮助,先生。它似乎可以正常工作,但有些条形码没有显示出来。错误是这样打印的“预期 2 得到 1”、“预期 3 得到 1”等。 是的,这是因为您为 UPCA 证明了错误格式的 sku。这就是为什么我们在那里尝试捕获。

以上是关于在条件条件下使用 milon 和 laravel 生成一些条形码时出错的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 雄辩的查询与条件下另一个表中的值的总和

Laravel 在使用 where 条件和更新时提供不同的结果

Laravel中关系的条件

laravel 雄辩的多个表 where 条件

向 Laravel 中添加条件 has()

laravel 5 关联中能加限制条件吗