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

    线上Laravel项目如何升级版本?

    方法一、阶梯式的升级


    顾名思义,如爬楼梯一样,一步步升级:

    • 从 5.1 升级到 5.2
    • 从 5.2 升级到 5.3
    • 从 5.3 升级到 5.4
    • 从 5.4 升级到 5.5

    这种方式比较简单直接,出错率比较低,比较推荐。

    注:Laravel 发布时,每一个版本的文档里都会包含『升级说明』,这类似一个约定,如果遇到升级需求时,记得检查下这些版本的『升级说明』先。

    方法二、迁移代码到新的项目


    Laravel 项目相对来讲比较规范化,从 5.1 以后,基本的目录结构没有太大的变化,所以我们可以直接创建一个全新的 5.5 项目,然后把项目里的文件转移过去:

    • 路由
    • 控制器
    • 模型
    • 表单请求验证类
    • 授权策略类
    • 自定义命令行
    • 等...

    升级注意事项


    • 升级前要确定项目中的依赖包是否支持将要升级到的 Laravel 目标版本;
    • 要完全测试(这个时候自动化测试很重要)。

     

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

    laravel 中授权策略类『注册授权策略』中的『注册』是什么意思?

    是只把 UserPolicy 策略和 User 模型绑定,这样当你在 UsersController(或者其他地方)中使用 $this->authorize('update', $user) 时,框架就能知道用的是那个策略来判断了。

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

    Eloquent ORM Model 对同一条数据 update 两次导致失败的问题?

    显示 “更新失败” 依据的返回是?

     $result = $this->ad_detail_model->updateOperation($update_one, $id);
    
    if( $result === false){
         ...
    }
    ....

    === 而不是 ==

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

    请教在laravel框架中,关于数据表自动更新时间的问题?

    原样提交数据,laravel本来就不会更新updated_at字段

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

    laravel-cache更新值不更新时间

    laravel的cache的put确实没有直接支持,更新值不更新过期时间的。

    但是有一功能是更新值却不更新过期时间的 Cache::increment 计步器,这个过期时间不会变,你可以看看底层是怎么实现的,自己拓展封装一个新的方法看看

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

    laravel-cache更新值不更新时间

    翻了一下源码,没有相关的方法。

    好奇为啥有这样的需求,最好说明业务需求情况,再来想解决方案比较合适。

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

    实际企业项目开发中比较流行的php框架

    国内公司最常见的:ThinkPHP(缺点一大堆,拥趸一大片)
    最强流行趋势:Laravel(接口很友好,学习难度低)
    功能最强大,关注相对较少:SymfonyPHP世界里最强大的框架,同时学习难度最高)

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

    实际企业项目开发中比较流行的php框架

    感觉现在 Laravel Yii 出现的频率比较高。
    Yii 开发效率高、学习成本低,适合要快速出产品的项目。
    Laravel 概念在PHP里比较新颖,学习曲线比较陡峭。

    如果做API,可以考虑 Lumen Slim 之类为框架。


    再补充一点,Composer流行的年代,你甚至可以通过简单的代码+Composer包形成适用于自己的框架。

    最后,框架只是其次,建议先打好基础。

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

    php生成 uniq id的方案

    string uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] )
    有这个函数的说..

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

    在PHP中执行多个构造函数的最佳方法

    我可能会做这样的事情:

    <?php
    
    class Student
    {
        public function __construct() {
            // allocate your stuff
        }
    
        public static function withID( $id ) {
            $instance = new self();
            $instance->loadByID( $id );
            return $instance;
        }
    
        public static function withRow( array $row ) {
            $instance = new self();
            $instance->fill( $row );
            return $instance;
        }
    
        protected function loadByID( $id ) {
            // do query
    
            $row = my_awesome_db_access_stuff( $id );
            $this->fill( $row );
        }
    
    
    
        protected function fill( array $row ) {
    
            // fill all properties from array
    
        }
    
    }
    
    ?>

    然后,如果我想要一个我知道ID的学生:

    $student = Student::withID( $id );

    或者,如果我有数据库行的数组:

    $student = Student::withRow( $row );

    从技术上讲,您不是在构建多个构造函数,而只是在构建静态辅助方法,而是通过这种方式避免在构造函数中使用大量意大利面条式代码。

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

    laravel如何使用ajax实现用户与用户之间关注

    如何实现关注和laravel 还有ajax 没有太大关系,你只需要创建一个表 ,做用户和关注对象的关系就好。

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

    在 Laravel 中有办法在控制器中获取前一次请求的输入数据么?

    要获取前一次请求传输的数据,可以使用 Illuminate\Http\Request 实例的 old 方法。 该方法将从会话( session )中拉取之前传输的值:

    $username = $request->old('username');

    Laravel 还提供了一个全局辅助函数 old,如果要在 Blade 模板中 显示旧数据, old 辅助函数会更方便。如果给定字段的旧值不存在,将返回 null :

    <input type="text" name="username" value="{{ old('username') }}">

     

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

    Laravel 请求:判断是否是 Ajax 请求

    方法一、ajax() 函数

    routes/web.php

    .
    .
    .
    Route::get('test-ajax', function () {
    
        if (request()->ajax()) {
            return '来自 AJAX 请求';
        } else {
            return '正常访问';
        }
    
    });

    方法二、expectsJson()

    Route::get('test-ajax', function () {
    
        if (request()->expectsJson()) {
            return '来自 AJAX 请求';
        } else {
            return '正常访问';
        }
    
    });

     expectsJson() 使用方法与 ajax() 相近,不过查看源代码后还是能看到区别:

    // 判断客户端是否期待返回 JSON 数据
    public function expectsJson()
    {
        return ($this->ajax() && ! $this->pjax()) || $this->wantsJson();
    }
    
    // 判断客户端是否「请求返回 JSON 格式」的数据
    public function wantsJson()
    {
        $acceptable = $this->getAcceptableContentTypes();
    
        return isset($acceptable[0]) && Str::contains($acceptable[0], ['/json', '+json']);
    }
    
    // 判断客服端是否使用 Pjax
    public function pjax()
    {
        return $this->headers->get('X-PJAX') == true;
    }
    
    // 判断是否 Ajax 请求
    public function ajax()
    {
        return $this->isXmlHttpRequest();
    }
    
    // 判断 Header 信息里 `X-Requested-With` 存在,并等于 `XMLHttpRequest`
    public function isXmlHttpRequest()
    {
        return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
    }

    需要注意的是 ajax() 是判断 X-Requested-With 标头,而 wantsJson() 是判断 Accept 标头里是否存在 json,而 expectsJson() 是两种情况去除掉 Pjax 请求。

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

    laravel用ajax没有反应

    方法一、ajax() 函数

    routes/web.php

    .
    .
    .
    Route::get('test-ajax', function () {
    
        if (request()->ajax()) {
            return '来自 AJAX 请求';
        } else {
            return '正常访问';
        }
    
    });

    方法二、expectsJson()

    Route::get('test-ajax', function () {
    
        if (request()->expectsJson()) {
            return '来自 AJAX 请求';
        } else {
            return '正常访问';
        }
    
    });

     expectsJson() 使用方法与 ajax() 相近,不过查看源代码后还是能看到区别:

    // 判断客户端是否期待返回 JSON 数据
    public function expectsJson()
    {
        return ($this->ajax() && ! $this->pjax()) || $this->wantsJson();
    }
    
    // 判断客户端是否「请求返回 JSON 格式」的数据
    public function wantsJson()
    {
        $acceptable = $this->getAcceptableContentTypes();
    
        return isset($acceptable[0]) && Str::contains($acceptable[0], ['/json', '+json']);
    }
    
    // 判断客服端是否使用 Pjax
    public function pjax()
    {
        return $this->headers->get('X-PJAX') == true;
    }
    
    // 判断是否 Ajax 请求
    public function ajax()
    {
        return $this->isXmlHttpRequest();
    }
    
    // 判断 Header 信息里 `X-Requested-With` 存在,并等于 `XMLHttpRequest`
    public function isXmlHttpRequest()
    {
        return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
    }

    需要注意的是 ajax() 是判断 X-Requested-With 标头,而 wantsJson() 是判断 Accept 标头里是否存在 json,而 expectsJson() 是两种情况去除掉 Pjax 请求。

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

    laravel用ajax没有反应

    1.$('submit')少了个#号,没有取到,应该是$('#submit')
    2.url应该是 /back/news/news

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

    java如何将字符串转为集合?

    使用json库一般都可以的。什么jackson,fastjson,gson等等。

    尝试通过Arrays.asList()方法对其进行处理,但需先将str内的中括号"[" "]"去除。

    去掉"[]"有一些工具类可以使用。我这里提一下(下面的示例只用作展示去掉[]的工具类,实际中还是使用json库吧。)

        package testng;
    
    import java.util.Arrays;
    import java.util.List;
    
    import org.apache.commons.lang.StringUtils;
    public class Test {
        public static void main(String[] args) {
            String str = "[\"P01\",\"P02\",\"P03\",\"P04\",\"P05\",\"P06\"]";
            str = StringUtils.stripStart(str, "[");//去掉前[
            str = StringUtils.stripEnd(str, "]");//去掉后]
            List<String> d = Arrays.asList(StringUtils.split(str,","));
            System.out.println(d);
        }
    }
  • 董俊俊 回答了问题
    9个月前

    运行项目数据库陷入死循环查询

    其实这已经是启动成功了,这个项目就是在不停的查表

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

    axios设置responseType===blob,失败返回json,如何处理?

    可以参考这篇:https://www.mi360.cn/questions/66

    不过它这个是 ArrayBuffer 转 String 的,Blob 转 String 还需要用到 FileReader。

    String 再转 JSON 这个不用教了吧?

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

    axios 的responseType 类型动态设置

    首先了解下,axios 属性配置的优先级,

    一下优先级由低到高

    • let instance = axios.create()
    • instance.defaults.timeout = 2500
    • instance.get("getcarline",{
      timeout:5000

    })

    根据 http status Code 的值来处理

    • http status Code:200 设置 responseType: "arraybuffer"
    • http status Code:500 设置 axios.defaults.responseType = 'json';
  • 董俊俊 回答了问题
    9个月前

    axios 的responseType 类型动态设置

    我们不需要根据服务器返回的情况去随机设置responseType

    一、我们要明白,我们在请求下载文件的api时候,可能给我们的返回值有两种情况:

    1. 直接给我们了我们想要的文件流
    2. 还有可能得到了JSON返回数据,让我们展现提示出信息或者被叫为错误信息

    二、理解responseType
    axios中这样描述的:responseType`表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
    不过我经常用blob,其实用什么都无所谓,主要看在拿到返回值的时候如何处理。

    三、处理返回值的不同情况

    const API = axios.create({
      baseURL: API_HOST
    })
    API({
          method: 'get',
          url: file.url,
          responseType: 'blob'
        }).then(response => {
        
            const type = response.type || null
            
            //relType你所下载的文件类型,这里是xlsx
            const relType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
            if (type.includes(relType)) {
              /**做文件下载 */
              
              return
            }
    
            if (type.includes('application/json')) {
                let reader = new FileReader()
                reader.onload = e => {
                    if (e.target.readyState === 2) {
                      let res = {}
                      res = JSON.parse(e.target.result)
                      console.info('back:: ', res)
                    }
               }
               reader.readAsText(response)
            }
          
        })

    根据response.type返回内容的MIME TYPE 来判断是要下载文件,还是要去做一些JSON数据提示什么的操作。如果是JSON类型那就把Blob通过readAsText转为JSON格式。这种方式通过测试IE10和IE10以上版本。

    作者可以尝试在arrayBuffer的情况下使用arrayBuffer to Json来进行信息提示。

最近访客
  • 小花花
    小花花 3个月前