2015-12-11 2 views
0

Я пытаюсь использовать Excel: @package maatwebsite/excel пакет на Laravel внутри контроллера, но я получаю эту ошибку:Laravel с использованием пакета Excel внутри контроллера

Non-static method Maatwebsite\Excel\Excel::create() 
should not be called statically, assuming $this from incompatible context 

мой маршрут является:

Route::get('all_users_report/{format}', '[email protected]_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); 
    } 
} 

ПОСТ ОБНОВЛЕНО 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); 
    } 
} 

ответ

2

Вы должны добавить 'Excel' => 'Maatwebsite\Excel\Facades\Excel' к вашему массиву фасадов в config/app.php и 'Maatwebsite\Excel\Excel\ServiceProvider' вашим провайдерам, чтобы использовать его так, как вы.

Или вы можете сделать экземпляр класса, используя $excel = App::make('excel');, а затем $excel->create(....

UPDATE

Есть два способа вызова пакета Excel:

Один из них заключается в использовании фасада, но вы должны добавить 'Excel' => 'Maatwebsite\Excel\Facades\Excel' в массиве фасадов в config/app.php, а затем

<?php 

namespace App\Http\Controllers; 

use App\Http\Requests; 

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); 
    } 
} 

Обратите внимание, что я удалил второй use. Также, если вы не хотите добавлять фасад в массив фасадов, вы можете использовать его - use Maatwebsite\Excel\Facades\Excel.

Другой способ это сделать экземпляр пакета и использовать этот экземпляр, как это:

<?php 

namespace App\Http\Controllers; 
use App\Http\Requests; 

class SystemExportDataController extends Controller 
{ 
    public function all_users_report($format) 
    { 
     $excel = App::make('excel'); 
     $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

Я редактировал свой пост, но если вы хотите использовать фасад, вы должны просто добавить его вместе с поставщиками в 'config/app.php' и это оно. Нет необходимости создавать новый экземпляр :) – lam3r4370

+0

Я получаю сообщение об ошибке sir. post updated –

+0

Установили ли вы версию 2 пакета? 'composer require maatwebsite/excel: 2. *' и, пожалуйста, запустите 'composer dumpautoload' и' php artisan clear-compiled' – lam3r4370

0

Я обнаружил, что мне нужно предварять обратной косой черты (означает root namespace), чтобы убедиться, что он с помощью Фасад. Это сделало бы ваш звонок следующим образом:

\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); 
Смежные вопросы