在大多数Java情况下,存在两个类:一个负责应用我的业务规则 - 服务层 - 另一个负责与我的数据库交互--Dao / Repository层。但是,在PHP情况下,我只有一个代表模型层的类。我的问题是,假设Laravel框架,我应该将我的业务规则放在一个独特的模型类中,还是有另一种类似于JSF的方法?我可以将中间件类用作服务层吗?
答案 0 :(得分:3)
老实说,您也可以在PHP中使用服务/回购图层。
所以会发生什么
要遵循这种方法,可以这样做。
use App\Services\PostService;
class PostController
{
public function __construct()
{
$this->postService = new PostService;
}
public function show($id)
{
$viewData = $this->postService->getPostData($id);
return view('posts.show', $viewData);
}
}
use App\Repositories\PostRepository;
use App\Repositories\CommentRepository;
class PostService
{
public function __construct()
{
$this->postRepo = new PostRepository;
$this->commentRepo = new CommentRepository;
}
public function getPostData($id)
{
$post = $this->postRepo->get($id);
$recentComments = $this->commentsRepo->getRecentComments();
return collect(compact('post', 'recentComments'));
}
}
use App\Models\Post;
public function PostRepository
{
public function get()
{
return Post::findOrFail($id);
}
}
此外,对于您的上一个问题,我想说,中间件仅用作必备条件。换句话说,假设您要确保用户登录以查看该特定路由,然后您将应用auth
中间件并保护您的路由免受其他未登录的用户...据我说,使用服务层作为中间件并不是真正需要的。您显然可以通过$this->myService = new Service
在中间件中调用服务层,但将其作为中间件并不是一个好的做法。
希望我能够很好地回答你的问题:)