Laravel从入门到实践

2023-11-01

Laravel从入门到实践

版本

  • Laravel版本: 8.75.0

安装与配置

使用Docker

  • 安装项目: curl -s “https://laravel.build/betterlife” | bash
  • 启动项目: cd betterlife && ./vendor/bin/sail up

使用Composer

  • 安装项目: composer create-project laravel/laravel betterlife
  • 启动项目: cd betterlife && php artisan serve

环境要求

  • PHP >= 7.3
  • PHP Extension
    • BCMath
    • Ctype
    • Fileinfo
    • JSON
    • Mbstring
    • OpenSSL
    • PDO
    • Tokenizer
    • XML

查看命令集

  • 查看可使用的命令: php artisan list

框架目录定义

  • app : 存放应用核心代码,如模型、控制器、命令、服务等
    • Console : 包含应用所有自定义的 Artisan 命令
    • Http : 包含了控制器、中间件以及表单请求等,几乎所有通过 Web 进入应用的请求处理都在这里进行
    • Exceptions: 包含应用的异常处理器,同时还是处理应用抛出的任何异常的好地方。
    • Models : 包含所有 Eloquent 模型类。 Eloquent ORM 为处理数据库提供了一个漂亮、简单的 ActiveRecord 实现。
    • Providers : 包含程序中所有的的服务提供者。通过在服务容器中绑定服务、注册事件。
  • bootstrap: 存放 Laravel 框架每次启动时用到的文件
  • config : 用于存放项目所有配置文件
  • database : 存放数据库迁移和填充类文件
  • public : Web 应用入口目录,用于存放入口文件 index.php 及前端资源文件(CSS、JS、图片等)
  • resources: 用于存放非 PHP 资源文件,如视图模板、语言文件、待编译的 Vue 模板、Sass、JS 源文件
  • routes : 项目的所有路由文件都定义在这里
  • storage : 用于存放缓存、日志、上传文件、已经编译过的视图模板等
  • tests : 存放单元测试及功能测试代码
  • vendor : 通过 Composer 安装的依赖包都存放在这里,通常该目录会放到 .gitignore 文件里以排除到版本控制系统之外

Valet

  • Valet 是 Mac 极简主义者的 Laravel 开发环境。

  • 确保 ~/.composer/vendor/bin 目录在系统的「PATH」中。

      vi ~/.bash_profile
        > export PATH=$PATH:~/.composer/vendor/bin
      source ~/.bash_profile
      echo $PATH
    
  • 安装Valet

      brew update && brew install php
      composer global require laravel/valet
      valet install
    
  • 关闭Valet: valet stop

  • 开启Valet: valet start

  • 重启Valet: valet restart

  • 绑定应用: cd betterlife && valet link

  • 访问网站: http://betterlife.test/

    • http://betterlife[同应用目录名称].test/
    • 任何二级域名也可以访问,如: http://abc.betterlife.test
  • 查看列表: valet links

  • 取消绑定: valet unlink betterlife

Telescope

  • Telescope 调试工具是本地 Laravel 开发环境的绝佳伴侣。
  • Telescope 可以洞察进入应用程序的请求、异常、日志条目、数据库查询、队列任务、邮件、通知、缓存操作、计划任务、变量输出。
  • 安装Telescope, 仅本地使用:
      composer require laravel/telescope --dev
      php artisan telescope:install
      php artisan migrate
    
  • 浏览器访问Telescope: /telescope
    • 如当前应用: http://betterlife.test/telescope

安装数据库

  • 安装Dbngin: https://dbngin.com/
  • 新建数据库 : betterlife
  • 修改根路径下文件.env配置
        DB_CONNECTION=mysql
        DB_HOST=127.0.0.1
        DB_PORT=3306
        DB_DATABASE=betterlife
        DB_USERNAME=root
        DB_PASSWORD=
    
  • 初始化数据库: php artisan migrate

启动工具包

  • 创建权限认证: Laravel UI

        composer require laravel/ui
        php artisan ui bootstrap --auth
        npm install && npm run dev
        npm run watch
    
    • views页面放置在resources/views目录下
  • 创建权限认证: Laravel Breeze

    • 使用Blade模版语言

        composer require laravel/breeze --dev
        php artisan breeze:install
        npm install && npm run dev
        php artisan migrate
        npm run watch
      
      • views页面放置在resources/views目录下
    • 使用Inertia.js前端Vue或React实现

        php artisan breeze:install vue
        或
        php artisan breeze:install react
      
        npm install && npm run dev
        php artisan migrate
        npm run watch
      
      • views页面放置在resources/js/Pages目录下
    • 提供权限认证后台Api支持

      • 提供给类似Next.js, Nuxt或其它类似的现代JavaScript应用程序权限认证功能
          php artisan breeze:install api
          php artisan migrate
        
        • Netx.js实现: https://github.com/laravel/breeze-next
  • 创建权限认证: Laravel Jetstream

    • Jetstream 官方文档:

    • 安装Jetstream: composer require laravel/jetstream

    • Jetstream 使用 Tailwind CSS 设计样式,并提供 Livewire 或 Inertia.js 驱动的前端脚手架技术栈。

    • Livewire + Blade

        php artisan jetstream:install livewire
      
        php artisan jetstream:install livewire --teams
        npm install && npm run dev
        php artisan migrate
      
      • views页面放置在resources/views目录下
    • Inertia + Vue

        php artisan jetstream:install inertia
      
        php artisan jetstream:install inertia --teams
        npm install && npm run dev
        php artisan migrate
      
      • views页面放置在resources/js/Pages目录下
    • 移除Jetstream

        composer remove laravel/jetstream
      
  • 自定义权限认证: https://laravel.com/docs/8.x/authentication#authenticating-users

创建应用: 博客

  • 创建表: blogs

        php artisan make:migration create_blogs_table --create=blogs
    
  • 表字段定义

    • 打开文件: database/migrations/{{datetime}}_create_blogs_table.php
    • 在up()方法里添加如下代码:
          Schema::create('blogs', function (Blueprint $table) {
              $table->increments('id');
              $table->string('title');
              $table->string('url')->unique();
              $table->text('description');
              $table->timestamps();
          });
      
    • 数据库同步: php artisan migrate
    • 数据库同步: php artisan migrate:fresh
      • 会重置整个数据库。
  • 建模和创建模拟数据

    • 建模和数据工厂: php artisan make:model --factory Blog

    • 在工厂类里定义模拟数据数据

      • 文件: database/factories/BlogFactory.php
      • 在definition()方法里添加代码
            return [
                'title' => substr($this->faker->sentence(2), 0, -1),
                'url' => $this->faker->url,
                'description' => $this->faker->paragraph,
            ];
        
    • 创建Blog Seeder: php artisan make:seeder BlogsTableSeeder

      • 方便添加代码中定义的数据到表中
    • 修改新生成的文件: database/seeders/BlogsTableSeeder

        public function run()
        {
            \App\Models\Blog::factory(5)->create();
        }
      
    • 修改原本存在的文件: database/seeders/DatabaseSeeder.php

      • 以激活使用: \Database\Seeders\BlogsTableSeeder
      • 修改如下:
            public function run()
            {
                $this->call(BlogsTableSeeder::class);
            }
        
    • 重新同步表和模拟数据到数据库: php artisan migrate:fresh --seed

    • 使用Tink Shell查看模型数据: php artisan tinker

          \App\Models\Blog::first();
      
  • Routing 和 Views

    • 在文件 routes/web.php 里添加路由

        Route::get('/', function () {
            $blogs = \App\Models\Blog::all();
            return view('welcome', ['blogs' => $blogs]);
        });
      
    • 修改文件: resources/views/welcome.blade.php

        <div class="blogs">
        @foreach ($blogs as $blog)
            <a href="{{ $blog->url }}">{{ $blog->title }}</a><br/>
        @endforeach
        </div>
      
    • 创建权限认证: Laravel UI

          composer require laravel/ui
          php artisan ui bootstrap --auth
          npm install && npm run dev
          npm run watch
      
    • 创建Form

      • 新建路由
          Route::get('/edit', function () {
              return view('edit');
          });
        
      • 新建文件: resources/views/edit.blade.php
          @extends('layouts.app')
          @section('content')
              <div class="container">
                  <div class="row">
                      <h1>Submit a blog</h1>
                  </div>
                  <div class="row">
                      <form action="/edit" method="post">
                          @csrf
                          @if ($errors->any())
                              <div class="alert alert-danger" role="alert">
                                  Please fix the following errors
                              </div>
                          @endif
                          <div class="form-group">
                              <label for="title">Title</label>
                              <input type="text" class="form-control @error('title') is-invalid @enderror" id="title" name="title" placeholder="Title" value="{{ old('title') }}">
                              @error('title')
                                  <div class="invalid-feedback">{{ $message }}</div>
                              @enderror
                          </div>
                          <div class="form-group">
                              <label for="url">Url</label>
                              <input type="text" class="form-control @error('url') is-invalid @enderror" id="url" name="url" placeholder="URL" value="{{ old('url') }}">
                              @error('url')
                                  <div class="invalid-feedback">{{ $message }}</div>
                              @enderror
                          </div>
                          <div class="form-group">
                              <label for="description">Description</label>
                              <textarea class="form-control @error('description') is-invalid @enderror" id="description" name="description" placeholder="description">{{ old('description') }}</textarea>
                              @error('description')
                                  <div class="invalid-feedback">{{ $message }}</div>
                              @enderror
                          </div><br/>
                          <button type="submit" class="btn btn-primary">Submit</button>
                      </form>
                  </div>
              </div>
          @endsection
        
      • 在文件 routes/web.php 里新建提交博客路由
          use Illuminate\Http\Request;
        
          Route::post('/edit', function (Request $request) {
              $data = $request->validate([
                  'title' => 'required|max:255',
                  'url' => 'required|url|max:255',
                  'description' => 'required|max:255',
              ]);
          
              $blog = tap(new App\Models\Blog($data))->save();
          
              return redirect('/');
          });
        
      • 修改app/Models/Blog.php
          <?php
        
          namespace App\Models;
        
          use Illuminate\Database\Eloquent\Factories\HasFactory;
          use Illuminate\Database\Eloquent\Model;
        
          class Blog extends Model
          {
              use HasFactory;
              protected $fillable = [
                  'title',
                  'url',
                  'description'
              ];
          }
        
  • 添加测试

    • 测试Form提交
      • 根路径下修改文件: phpunit.xml
        • 配置使用SQLite(in-memory)数据库
            <php>
                ... 
                <env name="DB_CONNECTION" value="sqlite"/>
                <env name="DB_DATABASE" value=":memory:"/>
                ...
            </php>
          
      • 删除Laravel默认生成的Feature测试类: rm tests/Feature/ExampleTest.php
      • 新建Feature测试类: php artisan make:test EditBlogsTest
      • 在新建的文件: tests/Feature/EditBlogsTest.php 新增测试用例如下
        • 合法有效的Blog保存进数据库
        • 校验失败的Blog不能保存进数据库
        • 不允许提交不符合格式的url
        • 当字段长度超过255,校验失败
        • 字段长度在255以内,校验成功
        • 以上测试用例编码如下
            <?php
          
            namespace Tests\Feature;
          
            use Illuminate\Foundation\Testing\RefreshDatabase;
            use Illuminate\Validation\ValidationException;
            use Tests\TestCase;
          
            class EditBlogsTest extends TestCase
            {
                use RefreshDatabase;
                /**
                * A basic feature test example.
                *
                * @return void
                */
                public function test_example()
                {
                    $response = $this->get('/');
          
                    $response->assertStatus(200);
                }
          
                /** @test */
                public function guest_can_submit_a_new_blog() {
          
                    $response = $this->post('/edit', [
                        'title' => 'Example Title',
                        'url' => 'http://example.com',
                        'description' => 'Example description.',
                    ]);
            
                    $this->assertDatabaseHas('blogs', [
                        'title' => 'Example Title'
                    ]);
            
                    $response
                        ->assertStatus(302)
                        ->assertHeader('Location', url('/'));
            
                    $this
                        ->get('/')
                        ->assertSee('Example Title');
                }
                
                /** @test */
                public function blog_is_not_created_if_validation_fails() {
          
                    $response = $this->post('/edit');
                    $response->assertSessionHasErrors(['title', 'url', 'description']);
                }
                
                /** @test */
                public function blog_is_not_created_with_an_invalid_url() {
          
                    $this->withoutExceptionHandling();
                
                    $cases = ['//invalid-url.com', '/invalid-url', 'foo.com'];
                
                    foreach ($cases as $case) {
                        try {
                            $response = $this->post('/edit', [
                                'title' => 'Example Title',
                                'url' => $case,
                                'description' => 'Example description',
                            ]);
                        } catch (ValidationException $e) {
                            $this->assertEquals(
                                'The url must be a valid URL.',
                                $e->validator->errors()->first('url')
                            );
                            continue;
                        }
                        $this->fail("The URL $case passed validation when it should have failed.");
                    }
                }
                
                /** @test */
                public function max_length_fails_when_too_long() {
          
                    $this->withoutExceptionHandling();
            
                    $title = str_repeat('a', 256);
                    $description = str_repeat('a', 256);
                    $url = 'http://';
                    $url .= str_repeat('a', 256 - strlen($url));
                
                    try {
                        $this->post('/edit', compact('title', 'url', 'description'));
                    } catch(ValidationException $e) {
                        $this->assertEquals(
                            'The title must not be greater than 255 characters.',
                            $e->validator->errors()->first('title')
                        );
                
                        $this->assertEquals(
                            'The url must not be greater than 255 characters.',
                            $e->validator->errors()->first('url')
                        );
                
                        $this->assertEquals(
                            'The description must not be greater than 255 characters.',
                            $e->validator->errors()->first('description')
                        );
                
                        return;
                    }
                
                    $this->fail('Max length should trigger a ValidationException');
                }
                
                /** @test */
                public function max_length_succeeds_when_under_max() {
          
                    $url = 'http://';
                    $url .= str_repeat('a', 255 - strlen($url));
                
                    $data = [
                        'title' => str_repeat('a', 255),
                        'url' => $url,
                        'description' => str_repeat('a', 255),
                    ];
                
                    $this->post('/edit', $data);
                
                    $this->assertDatabaseHas('blogs', $data);
                }
            }
          
          
      • 运行测试用例: php artisan test

在本框架中使用Laravel

  • 本框架skygreen2001/betterlife
  • Laravel 框架中底层使用了Symfony框架
    • 如 dd() 实现使用了Symfony 的 VarDumper::dump 方法
  • Composer类似Java中的Maven专为解决第三方库的依赖安装使用
    • 本框架通过Composer安装了Laravel库: laravel/framework,相应自动下载了Symfony的底层函数库
    • 本框架核心独立实现,并未使用任何Laravel框架代码,加载Laravel库,是提供给Laravel使用者使用,兼顾两者的优势
  • 可在根路径test.php文件中取消相关注释查看运行效果
  • 在本框架中使用Laravel
        // 可使用Laravel的Helper方法
        // [dd()](https://laravel.com/docs/8.x/helpers#method-dd)
        // 在Visual Studio Code编辑器里如果函数语法提示错误,需修改Visual Studio Code配置: 
        // - "intelephense.files.associations": ["*.php", "*.phtml", "*.inc", "*.module", "*.install", "*.theme", ".engine", ".profile", ".info", ".test"]
        $value1 = "Hello";
        $value2 = "World";
        $value3 = "Skygreen";
        dd($value1, $value2, $value3);
        $v = [$value1, $value2, $value3];
        use Symfony\Component\VarDumper\VarDumper;
        VarDumper::dump($v);
    
        // [可使用Laravel的Collections](https://laravel.com/docs/8.x/collections)
        // 在Visual Studio Code编辑器里如果函数语法提示错误,需修改Visual Studio Code配置: 
        // - "intelephense.files.associations": ["*.php", "*.phtml", "*.inc", "*.module", "*.install", "*.theme", ".engine", ".profile", ".info", ".test"]
        use Illuminate\Support\Collection;
        use Illuminate\Support\Str;
        Collection::macro('toUpper', function () {
            return $this->map(function ($value) {
                return Str::upper($value);
            });
        });
        $collection = collect(['first', 'second']);
        $upper = $collection->toUpper();
        echo $upper;
    

部署

  • Nginx 配置: https://laravel.com/docs/8.x/deployment#nginx

    • 网站根路径下应指向 public/index.php , 以确保网站配置文件配置项不暴露,及其它网站源码安全问题。
  • 生产环境性能优化

    • Autoloader优化: composer install --optimize-autoloader --no-dev
      • 确保根路径下保留composer.lock文件
    • 配置优化 : php artisan config:cache
    • Route加载优化: php artisan route:cache
    • View加载优化 : php artisan view:cache

学习资料

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel从入门到实践 的相关文章

  • Composer安装失败php版本冲突

    我要在我的 laravel 项目中安装作曲家 但出现如下错误 您的要求无法解析为一组可安装的软件包 I tried var www html pro composer install 然后我得到了 Problem 1 This packag
  • LDAP 过滤器用于区分名称

    我使用以下代码成功查询 Active Directory 中的用户 filter objectCategory person samaccountname someusername fields array samaccountname m
  • 按带宽限制成员资格

    我刚刚将 Codeigniter 应用程序部署到 Amazon EC2 使用 S3 作为媒体 使用 RDS 作为 MySQL 我需要根据使用的带宽量限制用户帐户访问 帐户将基于带宽 例如基本帐户 x 每月最多 20GB 等 但是我不知道最好
  • PHP 中的 XPath 删除 HTML 标签

    我在 PHP 中使用 XPath 来检索 HTML 文档的一部分 假设我的 HTML 文档如下所示 div a href some link address com Hello a p Some text here p div div p
  • Laravel 从 5.1 升级到 5.2.0 错误

    出现错误composer update命令 我的composer json 文件是 name laravel laravel description The Laravel Framework keywords framework lara
  • 联系表 7 根据用户选择立即发送给多个联系人

    您好 我正在 WordPress 联系表单 7 中创建联系表单 如果用户选择 全部 我想立即向多个收件人发送电子邮件 我看过这个 但似乎没有记录您是否可以一次发送给多个收件人http contactform7 com selectable
  • 有没有办法清除所有会话中的一些会话数据?

    一般来说 我有以下场景 从数据库中获取产品及其相关数据 将获取的数据转换为 php product 对象 在会话中缓存产品对象 缓存是只读的 即客户在网站上查看产品 但也有类似的电话getProductIdsByCategory categ
  • mysql 分区错误主键必须包含表分区函数中的所有列

    在 MySQL 8 上我有这个表 CREATE TABLE float values id bigint UNSIGNED NOT NULL attribute id bigint UNSIGNED NOT NULL value doubl
  • orm和pdo的区别

    我对 ORM 和 PDO 之间的区别有点困惑 PDO是一种ORM吗 根据我的理解 ORM 基本上是一种数据映射 PDO 还提供了数据库数据的抽象 PDO 和 ORM 是两个完全不同的东西 PDO 是数据库访问抽象层的具体实现 它使您能够使用
  • 将 PHP 错误存储在日志文件中

    我想将 php 生成的任何错误和警告存储在日志文件中 但是still也以正常方式显示它们 回显 Thanks 您可以定义自己的函数并描述如何处理错误 http www php net manual en function set error
  • Magento:查找包含产品的订单

    Magento 有没有办法找到包含给定产品的所有订单 如果可以通过管理面板来完成就更好了 报告 gt 产品 gt 订购的产品向我提供了产品销售的日期以及包含该产品的订单数量 但我需要知道哪些特定订单包含该产品 谢谢你 这个问题我在另一个问题
  • 通过 Composer 安装 Codeception 到 Yii2

    我在将 Codeception 安装到 Yii2 项目时遇到问题 1 下载composer到Yii2项目中 curl sS https getcomposer org installer php 2 尝试安装Codeception php
  • PHP file_get_contents() 和设置请求标头

    使用 PHP 是否可以发送 HTTP 标头file get contents 我知道您可以从您的php ini文件 但是 您是否还可以发送其他信息 例如HTTP ACCEPT HTTP ACCEPT LANGUAGE and HTTP CO
  • 两个 mysql_fetch_array 语句

    是否有任何原因导致我无法在一个 while 循环中包含两个处理两个不同 mysql 查询结果的 mysql fetch array 语句 原因是我有两个来自 mysql 数据库的查询结果 每个结果包含两列 如下所示 Query 1 Date
  • PHP 字符串转日期时间(AM/PM)

    可以将格式为 A H i m d y 的字符串转换为 php 中的日期时间吗 示例字符串 AM 05 28 07 08 13 这不起作用 date DateTime createFromFormat A H i m d y AM 05 28
  • Laravel 分页链接不包含其他 GET 参数

    我将 Eloquent 与 Laravel 4 的 Pagination 类一起使用 Problem 当URL中有一些GET参数时 例如 http site example users gender female body hot 生成的分
  • ajax - 检查用户名是否存在+如果存在则返回消息

    我试图检查用户想要的用户名是否已被使用 而无需发送表单 基本上是用户名字段的模糊 我遇到了一些麻烦 有几个问题 我有我的输入字段加上js
  • PHP cURL 代理带标头?

    我正在制作一个 PHP 图像代理脚本 我需要它不仅能够回显其请求的图像的内容 而且还能够以相同的方式重现图像请求的标头 我见过一个 另一个 但没有同时看到过 这些 cURL 选项让我感到困惑 我该怎么做 抱歉 我不确定你想要什么 这是从图像
  • 如何在 PHP 中验证电子邮件? [复制]

    这个问题在这里已经有答案了 如何使用 php5 验证输入值是有效的电子邮件地址 现在我正在使用这段代码 function isValidEmail email pattern a z0 9 a z0 9 a z0 9 a z0 9 a z
  • 用 PDO 和准备好的语句替换 mysql_* 函数

    我总是做简单的连接mysql connect mysql pconnect db mysql pconnect host user pass if db echo strong Error strong Could not connect

随机推荐

  • 用好这 28 个工具,开发效率爆涨|云效工程师指北

    大家好 我是秦世成 我在云效负责制品仓库Packages的开发工作 作为一个有多年经验的资深CRUD后端工程师 使用过很多日常开发所需的工具软件 其中不少能堪称为 神器 这些 神器 能极大的提升日常开发的效率 小到一个复制粘贴操作 大到开发
  • Wireshark

    抓包工具 抓包工具是拦截查看网络数据包内容的软件 抓包工具由于其可以对数据通信过程中的所有lP报文实施捕获并进行逐层拆包分析 一直是传统固网数通维护工作中罐常用的故障排查工具 业内 流行的抓包软件有很多 Wireshark SnifferP
  • 【vue】$set怎么使用

    vue中在data 里的数据才是响应式的 有的场景 比如说后端返回的接口对象里 想再增加一个属性 作为响应式 这时候可以用到 set添加 set总共三个参数 第一个为当前对象 第二个为属性名 第三个为属性值
  • nebula graph 常用命令(updating)

    文章目录 管理Storage主机 空间 创建标签 边 点 增 改 删除点和边 索引 创建索引 重建索引 drop tag 查询 match go FETCH LOOKUP 统计 管理Storage主机 从 3 0 0 版本开始 在配置文件中
  • 循环遍历的区别

    循环遍历的区别 forEach 直接循环数组 没有返回值 如何结束循环 是结束本次循环是可以使用return 但是结束全部循环return无效 原因 好像是因为forEach不管符不符合都会走完所有的循环 所以return结束本次循环后 会
  • 【markdown工具配合图床】PicGo图床配置教程,一秒读懂配置

    前言 看到这篇文章的大佬 我默认大家都会配置git 已经配置好ssh公钥 此时你看到的这篇文章就是基于markdown工具 VSCode Typora 编写的 PicGo作为图床转换工具 并配合gitee作为图片服务器 仓库 个人设置找到私
  • tms web core 调用webapi的方法

    webhttprequest组件属性设置 header Cache Control no cache no store must revalidate Content Type application x www form urlencod
  • 紫书《算法竞赛入门经典》

    紫书 算法竞赛入门经典 题目一览 第3章 数组和字符串 例题 UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 340 Master Mind Hints UVA 158
  • 利用StringEscapeUtils对字符串进行各种转义与反转义(Java)

    转载自 Java我人生 陈磊兴 原文出处 http blog csdn net chenleixing article details 43456987 apache工具包common lang中有一个很有用的处理字符串的工具类 其中之一就
  • renren-generator项目启动后无法打开网页

    解决
  • JavaScript对象的定义以及创建对象的三种方式和遍历对象的介绍以及相对应的案例

    JavaScript对象 1 什么是对象 在JavaScript中 对象是一组无序的相关属性和方法的集合 所有的事物都是对象 例如字符串 数值 数组 函数等 对象是由属性和方法组成的 属性 事物的特征 在对象中用属性来表示 常用名词 方法
  • ElasticSearch 之 _score

    ElasticSearch 之 score 1 什么是 score 2 布尔模型 3 词频 逆向文档频率 TF IDF 3 1 词频 3 2 逆向文档频率 3 3 字段长度归一值 3 4 结合使用 4 向量空间模型 5 Lucene的实用评
  • MySQL免安装版下载及安装(完整版)

    1 安装包下载 1 进入官网下载 MySQL Download MySQL Community Server Archived Versions 2 压缩包解压到你要安装的位置 2 MySQL配置 1 以管理员身份打开命令 2 跳转到MyS
  • 圆形图片

    public class RoundImageView extends ImageView public RoundImageView Context context super context TODO Auto generated co
  • 期货,实例讲述

    说到 期货 有人马上就会想到一大堆的粮食或者金属品的满天飞 其实不然 如果要每个人都抱一大堆的粮食回家的话我想经纪公司存在也没有它实质的意义了 其实对于大多数的投机者来说 期货 就和 股票 一样 都是一种低买高卖的挣钱工具 它并不需要你把一
  • 分布式复习1~3章

    参考 学校ppt 整体 爹 https zhuanlan zhihu com p 341814546 时间和时钟 https blog csdn net fragile98 article details 113695334 分布式系统的时
  • 利用ESP8266模块实现远程用手机控制开关

    利用ESP8266模块实现远程用手机控制开关 文章目录 前言 一 ESP8266是什么 二 使用步骤 1 密钥与核心库 2 连接Wi Fi 3 手机端控制函数 总结 插入链接与图片 列表 前言 随着万物联网的时代到来 通过互联网来控制已经越
  • AIGC 的概念与内涵

    导读 目前 对AIGC这一概念的界定 尚无统一规范的定义 国内产学研各界对于AIGC的理解是 继专业生成内容 ProfessionalGeneratedContent PGC 和用户生成内容 UserGeneratedContent UGC
  • 多线程-线程通信(wait-notify,await-single,park-unpark)

    在多线程场景中 如有些线程需要依赖另外线程的结果而继续执行 如多个线程处理请求 有的处理的快有点慢 快的需要等待慢的线程结果一起提交执行结果 都会涉及到线程间的通信 就是A线程告知B线程处理的结果是怎么样 B线程再执行对应逻辑 通信比较经典
  • Laravel从入门到实践

    Laravel从入门到实践 版本 Laravel版本 8 75 0 安装与配置 使用Docker 安装项目 curl s https laravel build betterlife bash 启动项目 cd betterlife vend