Показать ссылку, если у предмета есть PDF в laravel - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь получить элемент для отображения ссылки на 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 голосов
/ 18 сентября 2018
@if(strlen({$rental->spec_sheet) > 0))
      <a href="{{$rental->spec_sheet}} " target="_blank">Download Spec Sheet</a>
@endif

используйте длину строки, чтобы определить, было ли загружено имя файла или нет

0 голосов
/ 18 сентября 2018

Похоже, вы ищете правильный способ сделать что-то в 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 голосов
/ 18 сентября 2018

Ваш код выше не будет работать, если к нему не прикреплен 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...