我尝试在控制器内的laravel上使用Excel: @package maatwebsite/excel
包,但是我收到了这个错误:
Non-static method Maatwebsite\Excel\Excel::create()
should not be called statically, assuming $this from incompatible context
我的路线是:
Route::get('all_users_report/{format}', 'SystemExportDataController@all_users_report');
我的控制器是:
class SystemExportDataController extends Controller
{
/**
* @param $format
*/
public function all_users_report($format)
{
Excel::create('all_users_records', function ($excel) use ($format) {
$excel->sheet('My Site - all users report', function ($sheet) use ($format) {
........
});
})->export($format);
}
}
POST UPDATED 2
'providers' => [
...
'Maatwebsite\Excel\ExcelServiceProvider'
],
'aliases' => [
...
'Excel' => 'Maatwebsite\Excel\Facades\Excel'
],
错误:
BadMethodCallException in ServiceProvider.php line 234:
Call to undefined method [package]
更新3:
全班控制员:
<?php
namespace App\Http\Controllers;
use App\Http\Requests;
use Maatwebsite\Excel\Excel;
class SystemExportDataController extends Controller
{
public function all_users_report($format)
{
Excel::create('all_users_records', function ($excel) use ($format) {
$excel->sheet('Epay.Li - all users report', function ($sheet) use ($format) {
$all_records = ChangeMoney::all();
$sheet->loadView('layouts.admin.all_users_report',
array(
'all_records' => $all_records,
)
);
});
})->export($format);
}
}
答案 0 :(得分:2)
你应该添加'Excel'=&gt; 'maatwebsite \ Excel \ Facades \ Excel'
到 config / app.php
和'Maatwebsite \ Excel \ Excel \ ServiceProvider'
中的facades数组到您的提供者为了按照你的方式使用它。
或者你可以使用 $ excel = App :: make('excel')创建一个类的实例;
然后 $ excel-&gt;创建(...
。
更新
&#xA;&#xA;有两种方法可以调用Excel包:
&#xA;&#xA;其中一种方法是使用外观,但你有在 config / app.php
中的facades数组中添加'Excel'=&gt;'Maatwebsite \ Excel \ Facades \ Excel'
,然后
&lt;?php&#xA;&#xA; namespace App \ Http \ Controllers;&#xA;&#xA;使用App \ Http \ Requests;&#xA;&# xA;类SystemExportDataController扩展Controller&#xA; {&#xA;公共函数all_users_report($ format)&#xA; {&#xA; Excel :: create('all_users_records',function($ excel)use($ format){ &#xA; $ excel-&gt; sheet( 'Epay.Li - 所有用户报告',功能($ sheet)使用($格式){&#xA; $ all_records = ChangeMoney :: all();&#xA; $ sheet-&gt; loadView('layouts.admin.all_users_report',&#xA; array(&#xA;'all_records'=&gt; $ all_records,&#xA;)&#xA;);&#xA; });&#XA; }) - &GT;出口($格式);&#XA; }&#xA;}&#xA;
&#xA;&#xA; 请注意,我删除了第二个 use
。此外,如果您不想在Facades数组中添加外观,您可以使用它 - 使用Maatwebsite \ Excel \ Facades \ Excel
。
&lt;?php&#xA;&#xA; namespace App \ Http \ Controllers;&#xA;使用App \ Http \ Requests;&#xA;&#xA; class SystemExportDataController extends Controller&#xA; {&#xA; public function all_users_report($ format)&#xA; {&#XA; $ excel = App :: make('excel');&#xA; $ excel-&gt; create('all_users_records',函数($ excel)使用($ format){&#xA; $ excel-&gt; sheet('Epay.Li - 所有用户报告',函数($ sheet)使用( $ format){&#xA; $ all_records = ChangeMoney :: all();&#xA; $ sheet-&gt; loadView('layouts.admin.all_users_report',&#xA; array(&#xA;'all_records' =&gt; $ all_records,&#xA;)&#xA;);&#xA;});&#xA;}) - &gt; export($ format);&#xA; }&#XA;}&#XA; 代码>
&#XA;
答案 1 :(得分:1)
我发现我需要添加一个反斜杠(表示root namespace),以确保它使用Facade。这将使您的电话如下:
{{1}}
答案 2 :(得分:1)
调用use Maatwebsite\Excel\Facades\Excel
之类的静态方法时,请使用use Maatwebsite\Excel\Excel;
而不是Excel::create()