【问题标题】:Argument 1 passed to App\Http\Controllers\UsoSueloController::store() must be an instance of Illuminate\Http\Request, string given传递给 App\Http\Controllers\UsoSueloController::store() 的参数 1 必须是 Illuminate\Http\Request 的实例,给定字符串
【发布时间】:2020-07-14 16:32:35
【问题描述】:

这是我的代码:

控制器:

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

我使用 trait 是因为有更多这样的控制器

应用/特征

<?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

请帮忙

Laravel 5.8

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    你试过了吗?

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

    【讨论】:

      【解决方案2】:

      当你在做的时候

      $this->store
      

      您正在调用控制器方法而不是使用特征。这是因为这些方法具有相同的名称。你需要Conflict resolution.

      所以...

          use storeTrait { store as traitStore };
      class UsoSueloController extends Controller
      {
      
          public function store(Request $request)
          {
      
              $file= 'uso_suelo.csv';
              $this->traitStore($file);
          }
      

      【讨论】:

        【解决方案3】:

        Php 假设你正在调用控制器的store() 方法,如果你想为 trait 方法使用与控制器方法相同的名称,你需要在控制器类中调用它时更改 traits 方法的名称(你根本没有这样做)。

        class UsoSueloController extends Controller
        {
            use storeTrait  {
              store as storeFile;
            }
        
            public function store(Request $request)
            {
                $file= 'uso_suelo.csv';
                $this->storeFile($file);
            }
        

        【讨论】:

        • 谢谢,我还有另一个错误:找不到文件,但我意识到在命名空间中它是错误的:我将其更改为命名空间 App\Traits;而且效果很好
        猜你喜欢
        • 2023-03-09
        • 2017-12-24
        • 2017-09-26
        • 1970-01-01
        • 2020-02-06
        • 2018-01-21
        • 2019-06-04
        • 2015-10-16
        • 1970-01-01
        相关资源
        最近更新 更多