如何实现控制器的接口?

How to implements a interface to a controller?

我试图实现控制器的接口,但是当我尝试这样做时,请求被转换为字符串。 这是控制器的代码:

class FilesController extends Controller implements Repository
{
    function __construct()
    {
        $this->factory = new RepositoryFactoryImp();
    }


    public function index($request)
    {
        $repository = $this->factory->createRepository($request->type_repository);

        return $repository->getFilesList($request);
    }
}

接口代码如下:

interface Repository
{
    public function index(GetFileListRequest $request);
}

然后我得到的错误是:

ErrorException: Trying to get property 'type_repository' of non-object in file C:\xampp\htdocs\pocs\repository\app\Http\Controllers\FilesController.php on line 31

我做了一个 dd($request);结果是一个字符串,该字符串是路由的 type_repository 变量的内容:

Route::get('files/{type_repository}', 'filesController@index');

可能是什么问题?是否可以实现与控制器的接口?

开始吧,您还没有在控制器中注入请求:

class FilesController extends Controller implements Repository
{
    // ...


    public function index($request) // <-----
    { //                  ^^^^^^^^^
        $repository = $this->factory->createRepository($request->type_repository);

        return $repository->getFilesList($request);
    }
}

尝试这样做:

use Illuminate\Http\Request;

// ...

    public function index(Request $request) { ... }
    //                    ^^^^^^^^^^^^^^^^

旁注

作为观察,您在接口中声明了 index() 方法,但在实现中调用了 createRepository() 方法。