• Laravel框架06:文件、迁移填充、会话、缓存


    一、文件上传

    1. 文件上传表单

    • action、method、enctype
    • file
    • submit
    <form action="/home/test/test12" method="POST" enctype="multipart/form-data">
        {{csrf_field()}}
        <input type="file" name="file" id="">
        <button type="submit">提交button>
    form>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2. 上传业务处理

    • 是否上传文件
    $request->hasFile("avatar");
    
    • 1
    • 验证文件是否上传成功
    $request->file("avatar")->isValid();
    
    • 1
    • 获取上传的文件
    $file = $request->file("avatar");
    // 或
    $file = $request->avatar;
    
    • 1
    • 2
    • 3
    • 扩展方法
      • path:文件绝对路径
      • extension:扩展名。
      • 更多方法见手册···
    • 存储路径
      如果路径是给PHP代码使用,路径建议使用相对路径。如果路径是给浏览器使用,则使用绝对路径。
      需要先在 /public 下添加文件夹 uploads。
    $request->file("avatar")->move('./uploads', md5(time() . rand(100000, 999999)) .".". $request -> file("avatar") -> getClientOriginalExtension());
    
    • 1

    3. 全部代码

    public function test12(Request $request) {
        //判断请求类型
        if ($request->isMethod("POST")) {
            // 上传
            if ($request->hasFile("avatar") && $request->file("avatar")->isValid()) {
                $request->file("avatar")->move('./uploads', md5(time() . rand(100000, 999999)) .".". $request -> file("avatar") -> getClientOriginalExtension());
            }
        }else{
            // 展示视图
            return view("home.test.test8");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    二、数据表的迁移与填充

    • 迁移:创建数据表的操作+删除数据表的操作
    • 填充:往数据表里填充写入测试的数据(数据的插入操作)

    1. 迁移文件

    • 存放在 database/migrations 下的文件称之为迁移文件。

    ① 创建迁移文件

    在这里插入图片描述

    php .\artisan make:migration create_paper_table
    
    • 1
    • 新创建的迁移文件中,up() 是创建数据表,down() 是删除数据表。

    ② 编写迁移文件

    • Schema 门面用于操作数据库。
    • $table 表示整个表的实例。
    • 语法:$table -> 列类型方法(字段名 [, 长度/范围]) -> 列修饰方法([修饰值]);
    public function up()
    {
        Schema::create('paper', function (Blueprint $table) {
            $table->increments("id");
            $table->string("paper_name", 100);
            $table->tinyInteger("paper_score")->default(100);
            $table->integer("start_time")->nullable();
            $table->tinyInteger("duration");
            $table->enum("status", [1, 2])->default(1);
        });
    }
    
    public function down()
    {
        Schema::dropIfExists('paper');
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    ③ 执行迁移文件

    • 第一次执行迁移文件前,需要先创建迁移文件记录表。
    php .\artisan migrate:install
    
    • 1

    在这里插入图片描述
    执行后,数据库中会多出一个数据表 migrations。

    • 删除自带的迁移文件,只保留自己的。
    • 执行迁移文件
    php .\artisan migrate
    
    • 1

    在这里插入图片描述

    ④ 回滚迁移文件

    • 回滚最后一次迁移操作
    php .\artisan migrate:rollback
    
    • 1

    在这里插入图片描述

    2. 填充(种子)文件

    • 存放在 database/seeds 下的文件称之为填充文件。

    ① 创建填充文件

    php .\artisan make:seeder PaperTableSeeder
    
    • 1

    在这里插入图片描述

    ② 编写填充文件

    • 在填充器文件中可以使用DB门面去新增数据。
    public function run() {
        //
        $data = [
            [
                "paper_name" => "五年高考,三年模拟",
                "start_time" => strtotime("+7 days"),
                "duration" => "120",
            ],
            [
                "paper_name" => "黄冈密卷",
                "start_time" => strtotime("+7 days"),
                "duration" => "120",
            ],
            [
                "paper_name" => "衡水期中卷",
                "start_time" => strtotime("+7 days"),
                "duration" => "120",
            ]
        ];
        DB::table()->insert($data);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    ③ 执行填充文件

    php .\artisan db:seed --class=PaperTableSeeder
    
    • 1

    在这里插入图片描述

    三、会话控制

    • session 默认存储在文件中。
    • session 文件的目录:storage/framework/sessions。
    • session 门面:use Illuminate\Support\Facades\Session;
    • session 也可以在视图中使用。
    public function test13() {
        // Session中存储一个变量
        Session::put("name", "张三");
        
        // 获取Session中的变量
        echo Session::get("name");
        
        // 获取Session中的变量,如果不存在返回默认值
        echo Session::get("age", 80);
        echo Session::get("gender", function () {
            return "沃尔玛购物袋";
        });
        
        // 获取Session中全部的相关信息
        var_dump(Session::all());
        
        // 检查变量在Session中是否存在
        var_dump(Session::has("name"));
        
        // 删除Session中的变量
        Session::forget("name");
        
        // 删除Session中的全部变量
        Session::flush();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    四、缓存机制

    • 缓存配置位于 config/cache.php

    1. 设置缓存

    • put()如果键已经存在,则直接覆盖原来的值。
    • 有效期必须设置,单位是分钟。
    Cache::put('key', 'value', $minutes);
    
    • 1
    • add() 如果键存在,返回false。如果不存在则添加成功返回true。
    Cache::add('key', 'value', $minutes);
    
    • 1
    • forever() 用于持久化存储到缓存,必须使用forget方法从缓存中删除。
    Cache::forever('key', 'value');
    
    • 1
    • remember() 如果键不存在,则获取默认值,并把变量设置为默认值。
    Cache::remember("time", 10, function (){
       return date("Y-m-d H:i:s");
    });
    
    • 1
    • 2
    • 3

    2. 获取缓存

    • get() 获取变量。
    Cache::get("name", "没有用户名");
    Cache::get("age", function (){
        return "没有设置年龄";
    });
    
    • 1
    • 2
    • 3
    • 4
    • has()判断某个变量是否存在
    Cache::has("gender")
    
    • 1

    3. 删除缓存

    • pull() 从缓存中获取之后再删除,常用于一次性存储。
    Cache::pull("age")
    
    • 1
    • forget() 直接删除。

    • flush() 清楚所有缓存,并删除对应的目录。

    Cache::flush();
    
    • 1

    4. 计数器

    • incrementdecrement 用于调整缓存中的整型数值。一般用于计数器。
    Cache::increment("count");
    Cache::increment("count", 2);
    Cache::decrement("count");
    Cache::decrement("count", 2);
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    8位ADC模板实例
    E: Unable to locate package libboost-all-dev
    [FAQ14551] 用 SN writer tool 写 Serial Num, 使移动设备系统关于界面 -> 序列号 显示所写内容.
    初学C语言有什么建议?
    Python异步编程并发执行爬虫任务,用回调函数解析响应
    【socket.js联合express】:搭建简约版聊天室
    项目实战——配置MySQL与Spring Security模块
    【前端】get fncName 与 function fncName 声明函数的区别
    TinyOs操作系统---第1章 初识RTOS及使用
    2022年Vue.js面试题汇总及答案【建议收藏】
  • 原文地址:https://blog.csdn.net/realoser/article/details/130825371