V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coffeygao
V2EX  ›  PHP

接着上次的“laravel 黑”优化一下看起来舒服的代码

  •  
  •   coffeygao · 2018-09-30 11:42:39 +08:00 · 2616 次点击
    这是一个创建于 2278 天前的主题,其中的信息可能已经有所发展或是发生改变。

    v2ex 大神多,我代码写的不好。但是这样写我感觉很舒服。让后期维护人员可能更加方便一些。尽可能的不给别人挖坑。 培训班出来的人只要严格要求自己,也会把代码写好。 对这段代码进行了简单的重构,方法还是这样,

      /**
        * @author  coffey
        *
        * 文档说明 3.x 版 https://www.easywechat.com/docs/3.x/zh-CN/server
        *
        * 微信初始化入口
        *
        * @return response
        */
       public function serve()
       {
           $app = $this->app;
           $server = $app->server;
           $server->setMessageHandler(function ($message) use ($app) {
               $openid = $message->FromUserName;
               $userService = $app->user;
               if (self::MSGTYPE_EVENT == $message->MsgType) {
                   $eventKeys = explode('qrscene_', $message['EventKey']);
                   $keyword = $eventKeys[1] ?? $message['EventKey'];
                   $material = Material::where('custom_name', $keyword)->first();
                   // 如果关注 注册用户信息
                   $userInfo['openid'] = $openid;
                   $user = $userService->get($userInfo['openid']);
                   switch ($message->Event) {
                       case self::EVENT_SUBSCRIBE:
                           $this->sbuscribe($user, $material, $keyword);
                           break;
    //                        取消关注事件
                       case self::EVENT_UNSBUSCRIBE:
                           return $this->unsbuscribe($userInfo);
                           break;
    //                        扫码事件
                       case self::EVENT_SCAN:
                           $this->scan($material, $openid, $keyword);
                           break;
    //                        其他事件
                       default:
                           return 'hello';
                           break;
                   }
               } else {
                   return '你在说什么';
               }
           });
    
           $response = $server->serve();
    
           return $response;
       }
    
       /**
        * @author  coffey
        *
        * 生成微信用户数据
        * @param $data
        * @return mixed
        */
       protected function generateWechatUserData($data)
       {
           $userInfo['openid'] = $data['openid'] ?? '';
           $userInfo['subscribe_time'] = $data['subscribe_time'] ?? '';
           $userInfo['unionid'] = $data['unionid'] ?? '';
           $userInfo['nickname'] = filterEmoji($data['nickname']) ?? '';
           $userInfo['avatar'] = $data['headimgurl'] ?? '';
           $userInfo['sex'] = $data['sex'] ?? '';
           $userInfo['province'] = $data['province'] ?? '';
           $userInfo['city'] = $data['city'] ?? '';
           $userInfo['country'] = $data['country'] ?? '';
           $userInfo['is_subscribe'] = 1;
    
           return $userInfo;
       }
    
       /**
        * @author  coffey
        *
        * 关注事件
        *
        * @param $wechatUser
        * @param Material|null $material
        * @param string        $keyword
        *
        * @return bool|void
        */
       protected function sbuscribe($wechatUser, Material $material = null, $keyword = '')
       {
    //                        生成微信用户数据
           $userInfo = $this->generateWechatUserData($wechatUser);
    //                        统一关注回复
           $this->wechatMessageService->sendText($wechatUser['openid'] ?? '', env('FOLLOW_WECHAT_WELCOME_MESSAGE', '欢迎关注答题通小学版的公众号!'));
           if (!empty($material)) {
               $userInfo['source'] = 2;
               $this->weixin_model->addDate($userInfo);
               $this->materialService->pushMessage($wechatUser['openid'] ?? '', $material);
           } else {
               $user_info['source'] = 3;
               $this->weixin_model->addDate($userInfo);
               $homework = Homework::query()->find($keyword);
               if (empty($homework)) {
                   Log::error('该作业不存在---'.$keyword);
    
                   return false;
               }
               $this->wechatMessageService->sendNewsItem($wechatUser['openid'] ?? '', $this->generateHomeworkData($homework));
               $this->materialService->sendScanHomeworkQrCode($wechatUser['openid'] ?? '');
           }
           $this->materialService->sendFollow($wechatUser['openid'] ?? '', $material);
    
           return;
       }
    
       /**
        * @author coffey
        *
        * 扫码事件
        *
        * @param Material|null $material
        * @param string        $openId
        * @param $keyword
        *
        * @return bool|void
        */
       protected function scan(Material $material = null, string $openId = '', $keyword)
       {
           //带参二维码中的数值
           if (!empty($material)) {
               $this->materialService->pushMessage($openId, $material);
           } else {
               $homework = Homework::query()->find($keyword);
               if (empty($homework)) {
                   Log::error('该作业不存在---'.$keyword);
    
                   return false;
               }
               $this->wechatMessageService->sendNewsItem($openId, $this->generateHomeworkData($homework));
               $this->materialService->sendScanHomeworkQrCode($openId);
           }
    
           return;
       }
    
       /**
        * @author  coffey
        *
        * 取消关注事件
        *
        * @param array $userInfo
        *
        * @return string
        */
       protected function unsbuscribe(array $userInfo = [])
       {
           $userInfo['is_subscribe'] = 0;
           $this->weixin_model->addDate($userInfo);
    
           return 'bye';
       }
    
       /**
        * @author  coffey
        *
        * 生成习题数据
        *
        * @param Homework $homework
        *
        * @return array
        */
       protected function generateHomeworkData(Homework $homework = null)
       {
           $title = $this->newsName($homework->term, $homework->grade_id, $homework->lesson);
           $url = $this->newsUrl($homework->homework_version_id, $homework->grade_id, $homework->day);
    
           return [
               'title' => $title,
               'url' => $url,
               'image' => getScheme('/[email protected]'),
           ];
       }
    

    https://www.v2ex.com/t/493900

    jowan
        1
    jowan  
       2018-09-30 11:50:31 +08:00
    朋友你这里是不是写错了

    ```
    $user_info['source'] = 3;
    $this->weixin_model->addDate($userInfo);
    ```
    一会 Camel 一会 UnderScore
    coffeygao
        2
    coffeygao  
    OP
       2018-09-30 11:53:50 +08:00
    @jowan 这里的这个方法确实是我用的。但是之前遗留下来的。没有去改动。只是进行了提炼。谢谢宝贵意见
    jowan
        3
    jowan  
       2018-09-30 11:55:37 +08:00
    @coffeygao 我指的是上面那个是$user_info,下面那个是$userInfo,这个赋值根本没起作用啊
    jowan
        4
    jowan  
       2018-09-30 11:56:56 +08:00
    sbuscribe 方法里面的 Line:10
    另外 subscribe 拼写错了
    sagaxu
        5
    sagaxu  
       2018-09-30 11:57:00 +08:00 via Android
    @jowan 典型的动态一时爽,重构 xxx
    coffeygao
        6
    coffeygao  
    OP
       2018-09-30 11:58:08 +08:00
    @jowan 感谢感谢!太粗心了。已经修改!感谢你帮我指出一个 bug,否则上线会被扣钱😂
    coffeygao
        7
    coffeygao  
    OP
       2018-09-30 11:59:56 +08:00
    @sagaxu 😂 大哥过来检查我代码了
    batter
        8
    batter  
       2018-09-30 12:02:10 +08:00
    @coffeygao 难道不需要测试就上线么😂😂,return 和 break 同时使用,感觉怪怪的,你说呢
    coffeygao
        9
    coffeygao  
    OP
       2018-09-30 12:03:49 +08:00
    @batter 都是自测。没撒问题功能正常就上了。。。。
    msg7086
        10
    msg7086  
       2018-09-30 12:07:52 +08:00   ❤️ 1
    在你上一个帖子的时候我就想说了。
    公司的代码是公司的财产,除非公司同意,否则任何把公司代码(即使是你为公司写的代码)就这样放出来是有严重法律问题的。公司可以以此为理由开除你并起诉你泄露公司机密(即使代码里并没有机密)。
    如果只是贴出三五行代码,也就算了。你这样整段整段的贴代码,实在是……

    再还有,代码的质量还要看测试覆盖。你这些个拼写错误,没有集成测试去检查,就直接放上生产了?
    coffeygao
        11
    coffeygao  
    OP
       2018-09-30 12:19:39 +08:00
    @msg7086 我错了。我不改贴出来。我没放生产呢。伙计
    hexiaolu
        12
    hexiaolu  
       2018-09-30 16:47:16 +08:00
    代码写得再烂能跑起来, 改的再好不能跑又有什么用呢.
    从来不会闲着蛋疼去改这改那,严格要求好自己的代码就行,有这时间还不如刷多几个帖子。
    CuminLo
        13
    CuminLo  
       2018-09-30 17:44:47 +08:00
    其实吧,我觉得没啥必要。

    如果真的完全遵循框架建议的话那么楼主就不应该用: Log::error('该作业不存在---'.$keyword);

    Log::info 会更适合
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1434 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:23 · PVG 01:23 · LAX 09:23 · JFK 12:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.