【问题标题】:Laravel Export From ViewLaravel 从视图中导出
【发布时间】:2020-07-18 11:28:08
【问题描述】:

我在刀片视图中添加了一个导出按钮,但出现以下错误..

函数 App\Http\Controllers\TripController::export() 的参数太少,通过了 0 个,预期正好 1 个

这是我要导出到 Excel 文档的 HTML 表格

TripsExport.php

<?php

namespace App\Exports;

use App\Trip;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;

class TripsExport implements FromView
{
    public function view(): View
    {
      return view('trips.edit', [
          'events' => Events::all()
      ]);
    }
}

trip.edit.blade.php

@extends('layouts.app')

@section('content')

<div class="container-fluid padding">
    <div class="row welcome text-center">
      <div class="col-12">
        <h1 class="display-6"> {{ $trip->destination }} Itinerary </h1>
      </div>
  </div>
  <div class="row welcome text-center">
    <div class="col-12">
      <h4 class="display-8"> {{$trip->startdate}} - {{$trip->enddate}}</h4>
    </div>
</div>
</div>
<hr>

<div class="row text-center">
  <div class="col-12">

  <a href="/trips" class="btn btn-secondary">Go back</a>
  <a href="/trips/{{$trip->id}}/edit/AddEvent" class="btn btn-success"> Add to Itinerary</a>
  <a href="{{route('export')}}" class="btn btn-secondary">Export</a>
</div>
</div>

<br/>

    <table class="table table-striped table-bordered table-hover">
        <thead class="thead">
            <tr class="warning">
                <th>Category</th>
                <th>Event Name</th>
                <th>Start Date</th>
                <th>End Date</th>
                <th>Time</th>
                <th>Address</th>
                <th>Notes</th>
                <th>Edit</th>
                <th>Delete</th>
            </tr>
        </thead>
        <tbody>
        @foreach($trip->events as $event)
            <tr>
                <td>{{ $event->categories->category }}</td>
                <td>{{ $event->event_name }}</td>
                <td>{{ $event->start_date }}</td>
                <td>{{ $event->end_date }}</td>
                <td>{{ $event->time }} </td>
                <td>{{ $event->address }} </td>
                <td>{{ $event->notes }} </td>
                <th>
                <a href="/events/{{$event->id}}/editEventForm" class="btn btn-primary" role="button" aria-pressed="true">Edit</a>
              </th>
            <th>
            <form action="{{route('events.destroy',[$event->id])}}" method="POST">
              @method('DELETE')
              @csrf
              <button class="btn btn-danger">Delete</button>
            </form>
          </th>
            </tr>
        @endforeach
        </tbody>
    </table>

    <br />
    <hr>


    <div class="panel panel-primary">
      <div class="panel-heading"></div>
      <div class="panel-body">
        <br>
        {!! $calendar_details->calendar() !!}
        {!! $calendar_details->script() !!}
      </div>
    </div>

@endsection

TripController.php

public function export($type)
    {
      return Excel::download(new TripsExport, 'itinerary.' . $type);
    }

路线

//Exporting
Route::get('export', 'TripController@export')->name('export');
Route::get('importExportView', 'TripController@importExportView');
Route::post('import', 'TripController@import')->name('import');

【问题讨论】:

  • 请分享您的路线...
  • 抱歉路线已添加
  • 您可能必须使用 Route 参数创建一个路由,例如Route::get('export/{type}', 'TripController@export`

标签: laravel export


【解决方案1】:

把它放在你的路线中:

Route::get('export/{type?}', 'TripController@export')->name('export');

然后在你的控制器中:

public function export($type = 'xls')
    {
      return Excel::download(new TripsExport, 'itinerary.' . $type);
    }

然后在你的刀片中,你甚至可以使用这个:

{{route('export')}}

或者这个:

{{route('export', 'xlsx')}}

如果您想导出单个行程

Route::get('/{trip}/export/{type?}', 'TripController@export')->name('export');
public function export(Trip $trip, $type = 'xls')
    {
      return Excel::download(new TripsExport($trip), 'itinerary.' . $type);
    }
class TripsExport implements FromView
{

    public $trip;

    public function __construct(Trip $trip){
         $this->trip = $trip;
    }

    public function view(): View
    {
       // eager load everything you need
       $this->trip->load('events.category');

      return view('trips.edit', [
          'trip' => $this->trip
      ]);
    }
}

【讨论】:

  • 我现在收到错误 undefined variable 'trip'.. 你知道为什么会发生这种情况吗?
  • 控制器或视图中缺少某些内容,您正在将 eventS 传递给视图,但视图希望获得 $trip->events,如果您愿意,我将编辑我的答案导出单程
【解决方案2】:

在您的路由文件中,您有没有任何参数的导出路由,如果您希望类型是动​​态的,那么您将必须创建一个带有如下路由参数的路由:

Route::get('export/{type}', 'TripController@export');

或者你可以在导出函数中为type参数设置一个默认值

public function export($type = 'excel') // this is just an example type
{
  return Excel::download(new TripsExport, 'itinerary.' . $type);
}

这应该可以解决您的问题

最好的。

【讨论】:

  • 我添加了默认类型,但出现错误“无法检测到 ReaderType 或 WriterType。确保将有效的扩展名传递给文件名或传递显式类型。”
  • 请您更新问题中的代码,然后我将能够更好地理解@Laura
猜你喜欢
  • 2019-04-23
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
相关资源
最近更新 更多