To jest mój kod:

Kontroler:

<?php

namespace App\Http\Controllers;

use App\UsoSuelo;
use Illuminate\Http\Request;
use App\Imports\UsoSueloImport;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\DB;
use storeTrait;

class UsoSueloController extends Controller
{

    public function store(Request $request)
    {

        $file= 'uso_suelo.csv';
        $this->store($file);
    }

Używam cechy, ponieważ mam więcej takich kontrolerów

aplikacja / cechy

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Imports\UsoSueloImport;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\DB;

trait storeTrait{

    public function store($file) {
        Excel::import(new UsoSueloImport, $file); 
    }
}

To daje mi następujący błąd

Argument 1 passed to App\Http\Controllers\UsoSueloController::store() must be an instance of Illuminate\Http\Request, string given, called in C:\Users\pachi\Documents\Version_web\mpe_web\app\Http\Controllers\UsoSueloController.php on line 30

Pomóż proszę

Laravel 5.8

1
Pamela Ojeda 2 kwiecień 2020, 19:09

3 odpowiedzi

Najlepsza odpowiedź

Php zakłada, że wywołujesz metodę store() kontrolera, jeśli chcesz użyć tej samej nazwy dla metody cechy co metoda kontrolerów, musisz zmienić nazwę metody cechy, gdy wywołujesz ją w klasie kontrolera ( których w ogóle nie zrobiłeś).

class UsoSueloController extends Controller
{
    use storeTrait  {
      store as storeFile;
    }

    public function store(Request $request)
    {
        $file= 'uso_suelo.csv';
        $this->storeFile($file);
    }
2
CleanCode 2 kwiecień 2020, 16:24

Kiedy robisz

$this->store

Wywołujesz metodę kontrolera i nie używasz cechy. Dzieje się tak, ponieważ metody mają tę samą nazwę. Potrzebujesz rozwiązania konfliktu.

Więc...

    use storeTrait { store as traitStore };
class UsoSueloController extends Controller
{

    public function store(Request $request)
    {

        $file= 'uso_suelo.csv';
        $this->traitStore($file);
    }
2
Andy 2 kwiecień 2020, 16:20

Próbowałeś tego?

trait storeTrait{

    public function store(Request $request, $file) {
        Excel::import(new UsoSueloImport, $file); 
    }
}
0
symlink 2 kwiecień 2020, 16:14