在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
{
}
然后UserController
从CRUDBaseController
扩展并覆盖一些父方法,如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)
1条答案
按热度按时间6jjcrrmo1#
从父函数复制粘贴更新函数,然后仅替换其内容。如果它的唯一一行正在调用父类,那么在子类中重新声明它是没有用的。
如果唯一不同的是UserRequest类,那么可以在重新声明的函数resolve(UserRequest::class)中执行。这将从容器中示例化类,并验证请求。
编辑。在父和子中使用Request而不是BaseRequest。