美文网首页程序员
使用laravel 如何优雅的进行逻辑处理

使用laravel 如何优雅的进行逻辑处理

作者: 咯噔爸比 | 来源:发表于2020-07-07 15:53 被阅读0次

我们先来了解一个概念解耦

解耦:耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。 解耦就是用数学方法将两种运动分离开来处理问题,常用解耦方法就是忽略或简化对所研究问题影响较小的一种运动,只分析主要的运动。(源自百科)

再来了解一下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

相关文章

网友评论

    本文标题:使用laravel 如何优雅的进行逻辑处理

    本文链接:https://www.haomeiwen.com/subject/dzjgqktx.html