在大多数Java情况下,存在两类:一类负责应用我的业务规则-服务层-另一类负责与我的数据库进行交互的层-Dao / Repository层.但是,在PHP情况下,我只有一个代表模型Layer的类.我的问题是,假设使用Laravel Framework,我应该将我的业务规则放在一个唯一的模型类中,还是有另一种类似于JSF的方法?我可以使用中间件类作为服务层吗?
解决方法:
老实说,您也可以在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);
}
}
另外,对于您的最后一个问题,我想说的是,中间件仅应作为必备组件使用.换句话说,假设您要确保用户已登录以查看该特定路由,然后您将应用身份验证中间件并保护您的路由不受其他未登录用户的攻击.据我说,使用服务层因为中间件并不是真正需要的.您显然可以通过$this-> myService = new Service在中间件中调用服务层,但是将其作为中间件听起来并不是一个好习惯.
希望我能很好地回答您的问题:)
标签:laravel,model-view-controller,java,php,service
来源: https://codeday.me/bug/20191112/2023480.html