PHP 8.2中的兼容类类型问题,Laravel

rn0zuynd  于 2023-05-23  发布在  PHP
关注(0)|答案(1)|浏览(200)

在PHP8.2中,我有下面结构来实现CRUD基础

基础请求

use Illuminate\Foundation\Http\FormRequest;

class BaseRequest extends FormRequest
{
}

基础控制器

<php?>
abstract class CRUDBaseController extends BaseController
{
 public function update(BaseRequest $request,$id)
 {
    $this->authorize('update', $this->service->getModel());
    $this->service->update($id, $request->validated());
    return redirect()->route($this->getViewPath() . '.index');
 }
}

用户请求

class UserRequest extends BaseRequest 
{
}

然后UserControllerCRUDBaseController扩展并覆盖一些父方法,如update方法

class UserController extends CRUDBaseController
{    
      
     public function update(UserRequest $request, $id)
     {
         return parent::update($request,$id);
     }
 }

虽然UserRequest继承自BaseRequest,但为什么在调用此方法时会出现以下错误?为什么我得到这个错误时,这些对象相同的父?
In UserController.php line 27: Declaration of App\Http\Controllers\API\UserController::update($id, App\Http\Requests\UserRequest $request) must be compatible with App\Http\Controllers\CRUDBaseController::update($id, App\Http\Requests\BaseRequest $request)

6jjcrrmo

6jjcrrmo1#

从父函数复制粘贴更新函数,然后仅替换其内容。如果它的唯一一行正在调用父类,那么在子类中重新声明它是没有用的。
如果唯一不同的是UserRequest类,那么可以在重新声明的函数resolve(UserRequest::class)中执行。这将从容器中示例化类,并验证请求。
编辑。在父和子中使用Request而不是BaseRequest。

相关问题