我们先来了解一个概念解耦
解耦:耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。 解耦就是用数学方法将两种运动分离开来处理问题,常用解耦方法就是忽略或简化对所研究问题影响较小的一种运动,只分析主要的运动。(源自百科)
再来了解一下laravel的文件结构
(https://learnku.com/docs/laravel/7.x/structure/7449
我们看一下使用中的场景
我们通常需要在控制器与模型层面增加一些公共功能;
例如:我们验证用户是否拥有哪些权限、我们针对特定的功能进行相同的逻辑处理
先看一下我们应用中的场景,有一个试题的功能会针对数据库获取出来的试题进行数据合并处理,有很多的控制器会用到共同的逻辑每个地方写一套总不太好吧 以下为公共的控制器方便使用
class Question extends Controller
{
//获取练习题列表
function getQuestionList($query){
$list=NewQuestionAction::model()->getQuestionList($query);
if(empty($list)) return false;
foreach ($list['list'] as &$val){
$val=$this->formartQuestion($val);
if(isset($query['unset_answer'])){
unset($val['answer']);
}
}
return $list;
}
/** 格式化问题内容,只允许一个问题
* author:yangl
* @param $data
*/
function formartQuestion($data){
$pic = $data['pic'];
$data['origin_pic'] = [];
if (!empty($pic)){
$pic = json_decode($data['pic'],true);
$data['origin_pic'] = $pic;
foreach ($pic as &$v){
$v=showImg($v);
}
}else {
$pic = [];
}
$data['pic'] = $pic;
$options = json_decode($data['options'],true);
$answer_ = json_decode($data['answer'],true);
$data['analysis'] = html_entity_decode($data['analysis']);
if($data['type'] != 3){
foreach ($options as $key=>&$val){
if(isset($val['pic'])&&!empty($val['pic'])) {
$val['origin_pic'] = $val['pic'];
foreach ($val['pic'] as &$v) {
$v = showImg(htmlspecialchars_decode($v));
}
}else{
$val['pic'] = [] ;
$val['origin_pic'] =[];
}
$val['_index'] = Num2letter($key);
}
}else{
if(!empty($answer_['pic'])){
foreach ($answer_['pic'] as &$v){
$v = showImg($v);
}
unset($v);
}
if(isset($answer_['content'])){
$answer_['content'] = html_entity_decode($answer_['content']);
}
//APP 格式统一
$answer_ = [$answer_];
$options = [];
}
$data['answer'] = $answer_;
$data['options'] = $options;
return $data;
}
}
我们就可以在其它的方法中直接调用了
public function exercise(Request $request,Question $question) {
$courseId = $request->input('courseId');
$list = $question->getQuestionList(['courseid'=>$courseId,'unset_answer'=>1]);
//此处为获取到的数据也可以在 Question 添加其它的公共逻辑
}
image.png
网友评论