У меня есть BaseController
, который обеспечивает основу большинства HTTP-методов для моего сервера API, например. метод store
:
BaseController.php
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store(Request $request)
{
$result = $this->repo->create($request);
return response()->json($result, 200);
}
Затем я расширяю этот BaseController
в более конкретном контроллере, например UserController
, например:
UserController.php
class UserController extends BaseController {
public function __construct(UserRepository $repo)
{
$this->repo = $repo;
}
}
Это отлично работает. Однако теперь я хочу расширить UserController
, чтобы добавить новый класс FormRequest
класса Laravel 5, который позаботится о таких вещах, как проверка и аутентификация для ресурса User
. Я хотел бы сделать это, например, путем перезаписи метода хранилища и использования инъекции зависимостей типа Laravel для класса Form Request.
UserController.php
public function store(UserFormRequest $request)
{
return parent::store($request);
}
Где UserFormRequest
простирается от Request
, который сам простирается от FormRequest
:
UserFormRequest.php
class UserFormRequest extends Request {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required',
'email' => 'required'
];
}
}
Проблема заключается в том, что для BaseController
требуется объект Illuminate\Http\Request
, тогда как я передаю объект UserFormRequest
. Поэтому я получаю эту ошибку:
in UserController.php line 6
at HandleExceptions->handleError('2048', 'Declaration of Bloomon\Bloomapi3\Repositories\User\UserController::store() should be compatible with Bloomon\Bloomapi3\Http\Controllers\BaseController::store(Illuminate\Http\Request $request)', '/home/tom/projects/bloomon/bloomapi3/app/Repositories/User/UserController.php', '6', array('file' => '/home/tom/projects/bloomon/bloomapi3/app/Repositories/User/UserController.php')) in UserController.php line 6
Итак, как я могу ввести подсказку, введя UserFormRequest, все еще придерживаясь требования запроса BaseController? Я не могу заставить BaseController потребовать UserFormRequest, потому что он должен работать для любого ресурса.
Я мог бы использовать интерфейс типа RepositoryFormRequest
как в BaseController
, так и в UserController
, но тогда проблема заключается в том, что Laravel больше не вводит UserFormController
через свой тип, навязывающий инъекцию зависимостей.