首先,我使用的是 Laravel 6 和 PHP 7.2。
好吧。我有各种模型,我可以在它们上执行相同的操作。对于 DRY,我想到了以下想法:
在每个模型上,我将实现一个接口,并将用于处理操作的实际实现放在一个可调用的控制器中。
问题是我不知道如何将工作模型路由绑定到这样的实现。
为了让我的问题更容易理解,这里有一些代码片段:
- 楷模
class Post extends Model implements Actionable { /* attributes, relationships, etc. */ }
class Comment extends Model implements Actionable { /* attributes, relationships, etc. */ }
class User extends Model implements Actionable { /* attributes, relationships, etc. */ }
- 控制器
class DoActionOnActionable extends Controller
{
public function __invoke(Actionable $actionable, Request $request) {
// implementation
}
}
我知道 Laravel 要做模型路由绑定,它确实需要知道要绑定什么DoActionOnActionable
模型
class DoActionOnUser extends DoActionOnActionable
{
public function __invoke(User $user, Request $request) {
parent::__invoke($user, $request);
}
}
class DoActionOnPost extends DoActionOnActionable
{
public function __invoke(Post $post, Request $request) {
parent::__invoke($post, $request);
}
}
class DoActionOnComment extends DoActionOnActionable
{
public function __invoke(Comment $comment, Request $request) {
parent::__invoke($comment, $request);
}
}
- 路线
Route::post('/users/{user}/actions', 'DoActionOnUser');
Route::post('/posts/{post}/comments/{comment}/actions', 'DoActionOnComment');
Route::post('/posts/{post}/actions', 'DoActionOnPost');
问题是当我向这些路由发送请求时,我需要尽可能多的时间来响应我取消请求。所以,我认为出了点问题,它没有按我预期的那样工作。
我很感激任何能帮助我理解我的实施问题或更好地解决我的问题(DRY)的东西。