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

时间:2018-09-17 21:33:28

标签: php laravel

我正在尝试获取一个项目以显示指向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

3 个答案:

答案 0 :(得分:1)

似乎您正在寻找在Laravel中做某事的正确方法,但是没有正确的方法。

给予

d.layer

我要作两个更改,1)transform.position = targetWaypoint 不应该是transform.position == targetWaypoint 吗?和2)将@if(!empty($spec_sheet)) <a href="{{$rental->spec_sheet}} " target="_blank">Download Spec Sheet</a> @endif 换成$spec_sheet,因为我觉得在几周后回到$rental->spec_sheet会更难理解。

因此,我建议您使用此方法应该没问题,因为Laravel中没有正确的方法。

@if(!empty(...))

答案 1 :(得分: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;

答案 2 :(得分:0)

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

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