我正在尝试获取一个项目以显示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
好像你正在寻找在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
如果没有附加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;
@if(strlen({$rental->spec_sheet) > 0))
<a href="{{$rental->spec_sheet}} " target="_blank">Download Spec Sheet</a>
@endif
使用字符串长度来确定是否上传了文件名