如果项目在laravel中具有PDF,则显示链接

问题描述 投票:1回答:3

我正在尝试获取一个项目以显示PDF的链接,如果该项目具有与之关联的PDF。我不确定如何格式化if语句。我正在使用Laravel。

以下是我在控制器中为该项目提供的代码:

 //PDF Upload
    if($request->hasFile('spec_sheet')) {
        //Get file name and extension
        $filenameWithExt = $request->file('spec_sheet')->getClientOriginalName();
        //Get just file name
        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
        //Get Ext
        $extension = $request->file('spec_sheet')->getClientOriginalExtension();
        //Store file name
        $fileNameOfPdfToStore = $filename. '.' .$extension;
        //Upload
        $path = $request->file('spec_sheet')->storeAs('public/mcelroy-specs', $fileNameOfPdfToStore);
    }

    $rental = new Rental;

    $rental->title = $request->title;
    $rental->name = $request->name;
    $rental->description = $request->description;
    $rental->product_image = $fileNameToStore; 
    $rental->spec_sheet = $fileNameOfPdfToStore;          

    $rental->save();

在视图中我有这个:

@foreach($rentals as $rental)
        <article class="cards-item">
            <figure class="card product">
                <div class="card-images">
                    <img src="/storage/rentals/{{$rental->product_image}}" alt="" >
                </div>
                <figcaption class="card-content">
                <h1 class="card-title">{{ $rental->title }}</h1>
                <h2 class="card-title product_title">{{ $rental->name }}</h2>
                <p class="card-text" style="text-align:left;">{{ $rental->description }}
                    @if(!empty($spec_sheet))
                    <a href="{{$rental->spec_sheet}} " target="_blank">Download Spec Sheet</a>
                    @endif

                </p>
                <form action="{{ route('cart.store') }} " method="POST">
                    {{ csrf_field() }}
                    <input type="hidden" name="id" value="{{ $rental->id }}">
                    <input type="hidden" name="title" value="{{ $rental->title }}">
                    {{-- <input type="hidden" name="pickupDate" value="{{ $rental->pickupDate }}">
                    <input type="hidden" name="returnDate" value="returnDate"> --}}
                    <div class="buttons">
                        <div class="back">
                            <button class="primary button" type="submit">Add to Cart</button>
                        </div>
                    </div>
                </form>
                </figcaption>
            </figure>
        </article>
        @endforeach
php laravel
3个回答
1
投票

好像你正在寻找在Laravel做某事的正确方法,但没有正确的方法。

特定

@if(!empty($spec_sheet))
   <a href="{{$rental->spec_sheet}} " target="_blank">Download Spec Sheet</a>
@endif

我会做两个改变,1)不应该$spec_sheet$rental->spec_sheet? 2)用@if(!empty(...))换掉@unless(empty())因为我觉得包括!会让你在几周内回到这里时更难理解。

所以我建议你使用它应该没问题,因为在Laravel中没有正确的方法。

@unless(empty($rental->spec_sheet))
   <a href="{{$rental->spec_sheet}} " target="_blank">Download Spec Sheet</a>
@endunless

0
投票

如果没有附加PDF,上面的代码将无效,因为变量$ fileNameOfPdfToStore将不存在,并且将引发硬错误。但假设您修复了该问题并为文件名存储了一个空字符串,或者可能是NULL而不是文件路径,那么您可以在Rental模型中创建一个如下所示的新属性:

public function getHasSpecSheetAttribute() {
    return $this->spec_sheet==null? false:true;
}

然后在你的视图中你会这样做:

@if($rental->hasSpecSheet)
    <a href="{{$rental->spec_sheet}} " target="_blank">Download Spec Sheet</a>
@endif

为了修复PDF上传代码,只需输入一个else语句并将其放入其中:

$fileNameOfPdfToStore = null;

0
投票
@if(strlen({$rental->spec_sheet) > 0))
      <a href="{{$rental->spec_sheet}} " target="_blank">Download Spec Sheet</a>
@endif

使用字符串长度来确定是否上传了文件名

© www.soinside.com 2019 - 2024. All rights reserved.