如何实现控制器的接口?
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()
方法。
我试图实现控制器的接口,但是当我尝试这样做时,请求被转换为字符串。 这是控制器的代码:
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()
方法。