이 질문이 이전에 여러 번 요청되었지만 Laravel/PHP에서는 불가능하다면 죄송합니다.
내 Laravel 애플리케이션에는 PostController
,它使用 Laravel 丰富的命名约定。我还有一个 CommentController
,它主要以各种方式复制 PostController
,因此我决定 CommentController
PostController를 확장해야 하는 代码>이 있습니다.
지금까지의 유일한 차이점은 store()
方法需要接受不同的 FormRequest
对象,因为它们具有不同的验证规则。因此,我重写了 store()
方法以期望 CommentFormRequest
而不是 PostFormRequest
(两者都扩展了 FormRequest
store() 메서드가 서로 다른 유효성 검사 규칙을 가지고 있으므로 다른
PostFormRequest 대신
CommentFormRequest를 예상하도록store() 메서드를 재정의했습니다(둘 다
FormRequest 확장).이렇게 하면 재정의된 메서드 매개변수가 기본 메서드와 일치해야 한다는 오류가 발생합니다.
이게 예상된 일인가요? 내가 하고 싶은 일에 대한 합리적인 해결책이 있나요?
여기에서 편집됨Post
类型。有些与其他模型有关系,例如Poll
可能与 PredefinedAnswer
模型有关系,而通用 Post
저는 사용자가 게시물, 질문, 여론 조사, 광고 등을 만들고 이에 댓글을 달 수 있는 이 프로젝트를 디자인하기 시작했습니다. Post
发表评论,但可能永远不允许对 Advert
게시물 유형입니다. 일부는 다른 모델과 관계가 있습니다. 예를 들어 post
表中,但具有不同的 postable_type
Poll은
Post는 그렇지 않을 수 있습니다.
일부는 다른 확인 논리가 필요할 수 있습니다. 예를 들어 사용자는 일반 PostController
中,我目前有一个非常简单的 store()
게시물에 댓글을 허용할지 여부를 결정할 수 있지만
AdvertController
내 데이터베이스에서는 이것들이 모두
class PostController extends Controller { protected $postableType; public function __construct() { $this->postableType = PostType::GENERIC; } public function store(PostStoreRequest $request): RedirectResponse { $validated = $request->validated(); $post = new Post(); $post->message = $validated['message']; $post->user_id = $request->user()->id; $post->postable_type = $this->postableType; $post->save(); return Redirect::route('feed'); } }🎜
구체적인 구현을 암시하는 대신 인터페이스를 암시하면 더 많은 이점을 얻을 수 있습니다. 예:
으아악이렇게 하면:
parent::store($request)
특별한 처리가 필요한 경우(예: 유형/온전성 검사를 수행하지만 나머지 방법은 동일하게 유지됨)여기에 참조된 다른 클래스[예:
ControllerInterface
、RedirectInterface
etc.]를 추가로 연결하고 코드를 더욱 단순화할 수 있습니다.