Laravel在控制器内部使用Excel包

时间:2015-12-11 19:18:47

标签: laravel laravel-5

我尝试在控制器内的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);
    }
}

3 个答案:

答案 0 :(得分:2)

你应该添加'Excel'=&gt; 'maatwebsite \ Excel \ Facades \ Excel' config / app.php 'Maatwebsite \ Excel \ Excel \ ServiceProvider'中的facades数组到您的提供者为了按照你的方式使用它。

&#xA;&#xA;

或者你可以使用 $ excel = App :: make('excel')创建一个类的实例; 然后 $ excel-&gt;创建(...

&#xA;&#xA;

更新

&#xA;&#xA;

有两种方法可以调用Excel包:

&#xA;&#xA;

其中一种方法是使用外观,但你有在 config / app.php 中的facades数组中添加'Excel'=&gt;'Maatwebsite \ Excel \ Facades \ Excel',然后

&#xA ;&#xA;
 &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

&#xA;&#xA; < p>另一种方法是创建一个包的实例并使用该实例,如下所示:

&#xA;&#xA;
 &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()