Аргумент 1, передаваемый в App \ Http \ Controllers \ UsoSueloController :: store (), должен быть экземпляром Illuminate \ Http \ Request, заданная строка - PullRequest
1 голос
/ 02 апреля 2020

Это мой код:

Контроллер:

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

Я использую черту, потому что у меня больше таких контроллеров

app / Черты

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

это дает мне следующую ошибку

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

Help pls

Laravel 5.8

Ответы [ 3 ]

2 голосов
/ 02 апреля 2020

Когда вы делаете

$this->store

Вы вызываете метод контроллера, а не используете черту. Это потому, что методы имеют одинаковое имя. Вам нужно Разрешение конфликтов.

Итак ...

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

    public function store(Request $request)
    {

        $file= 'uso_suelo.csv';
        $this->traitStore($file);
    }
2 голосов
/ 02 апреля 2020

Php предполагает, что вы вызываете store() метод контроллера, если вы хотите использовать то же имя для метода trait, что и для метода controllers, вам нужно изменить имя метода traits, когда вы вызываете его внутри класс контроллера (чего вы вообще не делали).

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

    public function store(Request $request)
    {
        $file= 'uso_suelo.csv';
        $this->storeFile($file);
    }
0 голосов
/ 02 апреля 2020

Вы пробовали это?

trait storeTrait{

    public function store(Request $request, $file) {
        Excel::import(new UsoSueloImport, $file); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...