董俊俊 的个人动态
  • 董俊俊 回答了问题
    3个月前

    怎么去随心所欲的使用 Laravel 框架各种功能?

    我个人的建议是:多折腾

    你会在无数次项目的开发与实践中获取不一样的知识,10 万行代码量达到的时候你再回头看现在的你。你会发现其实成长并没有那么难,难在不去坚持。

    虽然我不是什么大佬,我也还比较菜,但是在刚毕业的几年,我起码做到了一点:每天写代码到 12 点左右睡觉。你不用去纠结写啥,好奇什么就写什么,比如你发现自己对 Node 不熟悉,那么就用它写一个自己曾经用 PHP 写过的项目的 demo 出来,你会发现这个过程可能会导致你熬夜,甚至通宵两天。

    这个过程中不要着急去看回报,它不会很快体现出来的,只有不断写代码,看代码,深究问题,你才会积累成长

    很多同学就是太着急,为啥 Laravel 看不懂?

    为啥别人写同样的项目就是比我快?

    为啥这个类他会这样去设计呢?

    为啥他的代码就是写得比我的漂亮呢?

    当你每次疑问完事都去学习,模仿,然后深究其原因,你就会变成他了。

    先做好守,然后才试着去突破,最后才会有你自己的思维方式,达到新的境界。

    我也是过来人,劝你一句,不要着急,坚持写就好了,要有一个写码到 80 岁的心态,你就会成长得很快了。加油!

  • 董俊俊 回答了问题
    3个月前

    怎么去随心所欲的使用 Laravel 框架各种功能?

    希望自己能够达到,需要什么方法,就能够脑海一气呵成的想出来。

    上面这一点,在我看来,没有十来个项目、甚至更多的磨炼,是比较难的,两个课程加上这个,只有三个项目。所以不用着急,课程的好处是能让你在短时间内拥有这些项目的经验,打好坚实的基础,现在你需要获取更多的项目经验。

    可以积极地思考公司现有的业务,是否能做一些工具来改善,或者能不能开始一个自己感兴趣的业余项目,这些都是积累项目经验的好方法,打怪升级嘛。等你有几十个项目经验的时候,也会看得越来越清楚。

    现在的学习方法有点笨,没有很多的创新,都是别人基础上拾来的果实。

    关于上面这一点,一直做重复的事情,确实很多时候会让人觉得很  ,但是你要有信心的是,很多大师都是从这些  办法中走出来的。日本剑道有个 守破离 的概念,也许可以给你提供一些参考。“守 破 离” 源自于日本剑道学习方法,后发展到其他武术与行业。他们含义如下:

    1. :最初阶段须遵从老师教诲,认真练习基础,不断重复,达到熟练的境界;
    2. :基础熟练后,试着突破原有规范让自己得到更高层次的进化;
    3. :在更高层次得到新的认识并总结,自创新招数另辟出新境界。

    你现在处于  的阶段,不断重复这些基本功,在没达到熟练之前,无需着急。前面的基础打得越好,后面的路就越轻松。

    刻意练习,每日精进。

  • 董俊俊 回答了问题
    3个月前

    token一般存在数据库里吗

    redis or memcache 里,使用频率高,就这么存。

  • 董俊俊 回答了问题
    3个月前

    thinkphp5怎么实现全站静态化啊?

    /**
     * 模板输出重写方法
     * @access protected
     * @param  boolean $isStatic 是否保存为静态文件
     * @param  string $template 模板文件名
     * @param  array  $vars     模板输出变量
     * @param  array  $replace  模板替换
     * @param  array  $config   模板参数
     * @return mixed
     */
    private function staticFetch($isStatic=false,$template = '', $vars = [], $replace = [], $config = [])
    {
        $HTML = $this->fetch($template, $vars, $replace, $config);//获得页面HTML代码
        if ($isStatic){//判断是否需要保存为静态页
            $thisModule=request()->module();//获取模块
            $thisController=request()->controller();//获取控制器
            $thisAction=request()->action();//获取方法
            $new_file = "{$thisModule}/{$thisController}";
            if(!file_exists($new_file)){
                //检查是否有该文件夹,如果没有就创建,并给予最高权限
                mkdir($new_file, 0777,true);
            }
            $new_file.="/{$thisAction}.".config('default_return_type');
            file_put_contents($new_file,$HTML);//生成静态页
        }
        return $HTML;
    }

     

  • 董俊俊 回答了问题
    3个月前

    Class '、GuzzleHttp\Client' not found?

    先确定有没有安装这个扩展包, GuzzleHttp\Client

  • 董俊俊 回答了问题
    3个月前

    Laravel 我想知道 app() 实例化一个类和用 new 实例化,有什么区别?app() 只能实例化构造函数不带参数的类吗?

    看了楼主的代码,有了灵感,所以我也试着重构了一下这部分的代码,想要实现了一个简单的翻译接口。
    新手的牛刀小试,请多多指教。多交流交流。

    <?php
    namespace App\Handlers;
    
    use GuzzleHttp\Client;
    use Overtrue\Pinyin\Pinyin;
    
    class BaiduTranslate
    {
        //初始化配置信息
        private $api;
        private $appid;
        private $key;
    
        //配置翻译方式
        private $from;
        private $to;
    
        public function __construct($from = 'zh', $to = 'en')
        {
            //我觉得这部分的属性赋值可以直接用全局变量数组$_ENV代替提高性能
            //应该看看数据库链连接的源码找找灵感
            //这里就先这样写着,作为新手逻辑清晰点
            $this->appid = $_ENV['BAIDU_TRANSLATE_APPID'];
            $this->key = $_ENV['BAIDU_TRANSLATE_KEY'];
            $this->api = $_ENV['BAIDU_TRANSLATE_API_URL'];
            $this->from = $from;
            $this->to = $to;
        }
    
        public function translate($text)
        {
            //如果没有配置百度翻译,自动使用兼容的拼音方案
            //按照个需,这里应该要有报错信息,API配置不全
            if (empty($this->appid) || empty($this->key)){
                return app(Pinyin::class)->permalink($text);
            }
    
            //实例化 HTTP 客户端
            $http = new Client;
    
            //发生 HTTP GET 请求
            $response = $http->get($this->query($text));
    
            //将获取到的结果(JSON格式的数据)通过解码获取其中的数据
            $result = json_decode($response->getBody(), true);
    
            if (isset($result['trans_result'][0]['dst'])){
                return $result['trans_result'][0]['dst'];
            }else{
                //如果百度翻译没有结果,使用拼音作为后备计划
                //照思路这里应该返回报错,翻译API接入有问题
                returnapp(Pinyin::class)->permalink($text);
            }
        }
    
        //创建请求语句
        private function query($text)
        {
            //根据百度翻译API文档,生成 sign
            //http://api.fanyi.baidu.com/api/trans/product/apidoc
            //appid+q+salt+密钥 的MD5值
            $salt = time();
            $sign = md5($this->appid . $text . $salt . $this->key);
    
            //构建请求参数
            $query = http_build_query([
                'q' => $text,
                'from' => $this->from,
                'to' => $this->to,
                'appid' => $this->appid,
                'salt' => $salt,
                'sign' => $sign,
            ]);
    
            return $this->api . $query;
        }
    }
  • 董俊俊 回答了问题
    3个月前

    开发 “附近的店铺 “的功能的数据表应该怎样设计

    我们之前是用 redis 的 geohash 来做的,当然我们的实时性要求不高,每天会定时匹配新加入的店铺

  • 董俊俊 回答了问题
    3个月前
  • 董俊俊 回答了问题
    3个月前

    PHP分页排序问题

    数据是从哪里来的,如果从数据库,可以使用sql中的order by关键字,如果是从搜索引擎里面数据,也都应当有相应的排序功能,一般的数据排序都不用php做的,

  • 董俊俊 回答了问题
    3个月前

    spring boot 启动时报错!?

    看错误信息:

    Cannot determine embedded database driver class for database type NONE
    1. 项目是否有用到数据库???

    2. 检查数据库配置;

    3. 检查数据库驱动程序;

  • 董俊俊 回答了问题
    3个月前

    spring service注解问题

    默认只要在容器中配置了一个bean,容器在启动时就会实例化该bean。
    如果设置懒加载模式(lazy-init=”true”),在使用时才会实例化对象。
    如果scope=”prototype”,则只会在使用时才会创建

  • 董俊俊 回答了问题
    3个月前

    spring service注解问题

    应用启动就实例化,具体可以看DefaultListableBeanFactory 和AbstractAutowireCapableBeanFactory的源码,@autowired是Bean的装配,具体可以看AutowiredAnnotationBeanPostProcessor的源码。

  • 董俊俊 回答了问题
    3个月前

    javascript里面的splice函数的用法求解

    首先你要先了解一下splice方法,可以看看w3school的解释:JavaScript splice() 方法

    而你的b和c都是对a数组的内存引用,所以你想要的是一个深拷贝。
    可以看看下面这两种方式:

    1、js的slice函数
    代码如下:

    var arr = ["One","Two","Three"];
    
    var arrtoo = arr.slice(0);
    arrtoo[1] = "set Map";
    document.writeln("数组的原始值:" + arr + "<br />");//Export:数组的原始值:One,Two,Three
    document.writeln("数组的新值:" + arrtoo + "<br />");//Export:数组的新值:One,set Map,Three

    2、js的concat方法
    代码如下:

    var arr = ["One","Two","Three"];
    var arrtooo = arr.concat();
    arrtooo[1] = "set Map To";
    document.writeln("数组的原始值:" + arr + "<br />");//Export:数组的原始值:One,Two,Three
    document.writeln("数组的新值:" + arrtooo + "<br />");//Export:数组的新值:One,set Map To,Three
  • 董俊俊 回答了问题
    3个月前

    Vuejs单文件的template标签

    补充一些:
    1.template本身没有很特别的意义,可以了解下html 的template标签
    2.官网以及其他人所描述的“根元素”,是指template标签下的元素,不包括也不是template本身
    3.经常2个错误:

    Component template should contain exactly one root element.
    例子:
    <template>
        <div>1</div>
        <div>2</div>
    </template>
    

    如上面所说:根元素是指template里面第一层的同级元素,这里同级元素有2个,也就是有2个根元素了(根元素就是那两个div)。
    tempalate下面第一层同级元素只能有一个,即所谓的只能有一个根元素

    Cannot use <template> as component root element because it may contain multiple nodes.

    这个错就是题主的错误,这个错误的意思是template下面不能使用template来做根元素,因为template本身就不能够保证不犯上面的错误。

    举个例子:不是说根元素只允许一个吗,那我再用个template来做根元素不就好了,比如

    <template>
        <template>
            ...
        </template>
    </template>
    

    不好意思,NO!因为你本身就不能保证这个用来做根元素的template它自己只有一个根元素,也就是第二个template里的“...”不一定只有一个根元素,这是vue不允许的。

    题主就是第二个错误:题主想用template来做一个根元素,但是这个template里面有label和input 两个同级元素了,也就是不只一个根元素了。

    note:当然,template下面第一层同级元素只允许一个只是针对根元素来讲的,当里面嵌套的template已经和根元素没什么关系了,就可以为所欲为!
    例子:

    <template>
      <div>
        <template>
          <template>
            232432
          </template>
        </template>
      </div>
    </template>
    

    如有不对,请指正^_^

  • 董俊俊 回答了问题
    3个月前

    Vuejs单文件的template标签

    组件只能有一个根元素,就是你这了第一个<template></template>下面必须只有一个根元素,可以使用一个容器元素包裹住,例如:

    <template>
        <div>
            <template v-for="branch in branches">
                <label :for="branch">{{ branch }}</label>
                <input type="radio" :name="branch" :value="branch" v-model="currentBranch">
            </template>
        </div>
    </template>
  • 董俊俊 提出了问题
    3个月前
  • 董俊俊 回答了问题
    3个月前

    vuejs的生命周期函数执行问题

    能不能认真检查下 o(╯□╰)o

    Mounted => mounted
    beforeUpdated => beforeUpdate
  • 董俊俊 回答了问题
    3个月前

    Vue生命周期内发起ajax请求,因为请求异步性,并且生命周期函数也是异步的,导致子组件获取结果滞后,如果才能保证同步?

    大致 思路不变。首先你在main里面通过异步获取了初始参数。但是由于异步的不确定性,导致在子组件中没有办法在mounted的时候,正确的获取到数据。
    那么是否可以在子组建中使用watch 来监听 vuex中初始数据呢。如果watch到了数据变化,且是正确的数据,这个时候在执行相应的函数,是不是就可以了。

  • 董俊俊 回答了问题
    3个月前

    如何清理ajax上传的无用图片

    这个你可以在你的后台添加一个图片管理功能啊,显示图片的使用状态,无用的可以在这个图片管理模块进行删除即可

最近访客
  • 小花花
    小花花 4周前