8

Laravel 安装&配置

 1 year ago
source link: https://wxyclark.github.io/Work/IT/PHP/Framework/Laravel/1-init&config.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Laravel 安装&配置

Laravel 8.x PHP对应的版本>=7.3.0 Laravel 7.x PHP对应的版本>=7.2.5 Laravel 6.x PHP对应的版本>=7.2.0 Laravel>=5.6 PHP对应的版本>=7.1.3

通过 Composer 创建项目

    composer create-project --prefer-dist laravel/laravel=8.0.* 目标目录

    # 加载依赖库
    composer update
    
    # 配置文件
    cp .env.example .env
    
    # 安装 maatwebsite/excel 组件
    # simple-cache降级(3.0 ——> 2.0)
    composer require psr/simple-cache ^2.0
    composer require maatwebsite/excel

本地开发环境

如果本地安装了 PHP 可使用 PHP 内置的服务器来为应用程序提供服务 http://localhost:8000

    php artisan serve

生成应用密钥

    php artisan key:generate
// app/Providers/RouteServiceProvider.php 文件,去掉下面这行代码的注释
protected $namespace = 'App\Http\Controllers';

Laravel配置

  • 将 web 服务器根目录指向 laravel 目标目录/public
  • 配置Web 读写权限:storage 目录和 bootstrap/cache,否则 Laravel 程序将无法运行
  • config/app.php 配置 timezone、locale、debug

ENV 的加载功能由类 \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class 完成

若想要自定义 env 文件,就可以在 bootstrap 文件夹中 app.php 文件

//  定义路径
$app->useEnvironmentPath('/customer/path');
//  定义文件
$app->loadEnvironmentFrom('customer.env');
  • 将 .env.example 文件重命名为 .env
  • .env 文件中列出的所有变量将被加载到 PHP 的超级全局变量 $_ENV 中,

env变量配置规则

key=value
# 注释易 # 开始
# value值 不使用引号包裹时 不允许出现空格
# value值 使用引号包裹时 不允许出现 \, 只能使用转义符号 \\; 不允许出现内嵌 " , 只能使用 \"

可以在 env 文件中使用变量为变量赋值

NVAR1="Hello"
NVAR2="World!"
NVAR3="{$NVAR1} {$NVAR2}"

代码中使用 env 配置的变量, xxkey 不能使用_ENV, value 才可以

$this->assertEquals('xxkey', $_ENV['NVAR3']);

config

config 配置文件由类 \Illuminate\Foundation\Bootstrap\LoadConfiguration::class 完成

  • Laravel 框架的所有配置文件都放在 config 目录中
  • config目录下使用 env(‘key', ‘defaultValue') 设置默认值
  • 代码中使用 App::environment(‘configKey') 检查 当前的环境配置是否与给定值匹配
# APP_ENV 也可以直接在 nginx 中配置
fastcgi_param  APP_ENV  production;

缓存config/cache.php

  • laravel默认使用文件缓存file,将序列化的缓存对象存储在文件系统中
  • 生成数据库缓存的migration文件
    php artisan cache:table 
  • Memcached缓存 需要安装 Memcached PECL 扩展包
  • Redis缓存 需要通过 Composer 安装 predis/predis 扩展包 (~1.0)

Web 服务器配置

Apache

  • 请务必启用 mod_rewrite 模块,让服务器能够支持 .htaccess 的解析
  • public/.htaccess 为前端控制器提供了隐藏 index.php
  • 如果 Laravel 附带的 .htaccess 文件不起作用,尝试下面的方法替代:
    Options +FollowSymLinks
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

Nginx

  • 入口文件 index.php
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

生产环境优化

优化自动加载

确保项目的源代码管理库中包含了 composer.lock

    composer install --optimize-autoloader

优化配置加载

这个命令可以将所有 Laravel 的配置文件合并到单个文件中缓存, 此举能大大减少框架在加载配置值时必须执行的系统文件的数量

    php artisan config:cache

./config/filesystems.php

return [
    'disks' => [

        'local' => [
            'driver' => 'local',
            //  ./storage/app
            'root' => storage_path('app'),

            //  public 可见性 转换为目录的 0755 和文件的 0644
            'permissions' => [
                'file' => [
                    'public' => 0664,
                    'private' => 0600,
                ],
                'dir' => [
                    'public' => 0775,
                    'private' => 0700,
                ],
            ],
        ],

        'public' => [
            'driver' => 'local',
            //  ./storage/app/public
            'root' => storage_path('app/public'),
            //  如果要使用 local 驱动为存储在磁盘上的文件预定义主机,可以向磁盘配置数组添加一个 url 选项
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

        //  亚马逊云储存
        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
            'endpoint' => env('AWS_ENDPOINT'),
            'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),

            //  给指定磁盘开启缓存功能
            'cache' => [
                'store' => 'memcached', //  缓存驱动名称
                'expire' => 600,    //  单位为秒的过期时间
                'prefix' => 's3-memcached-cache-prefix', //  缓存前缀 
            ],
        ],


        //  Laravel 的文件系统集成能很好的支持 FTP、SFTP ,但是 默认配置文件没有包含示范配置
        'ftp' => [
            'driver' => 'ftp',
            'host' => 'ftp.example.com',
            'username' => 'your-username',
            'password' => 'your-password',
        // 可选的 FTP 配置项...
            // 'port' => 21,
            // 'root' => '',
            // 'passive' => true,
            // 'ssl' => true,
            // 'timeout' => 30,
        ],
        'sftp' => [
            'driver' => 'sftp',
            'host' => 'example.com',
            'username' => 'your-username',
            'password' => 'your-password',
            // 基于 SSH 密钥的身份验证设置...
            // 'privateKey' => '/path/to/privateKey',
            // 'password' => 'encryption-password',
            // 可选的 SFTP 配置...
            // 'port' => 22,
            // 'root' => '',
            // 'timeout' => 30,
        ],
    ],

    'links' => [
        public_path('storage') => storage_path('app/public'),

        //  可配置额外的符号链接
        public_path('images') => storage_path('app/images'),
    ],
];

【公共磁盘】public 磁盘适用于要公开访问的文件,public 磁盘使用 local 驱动 【本地驱动】local php artisan storage:link 将在public目录下生成storage的软链接 指向 base_path(storage/app/public)

//  文件路径
$url = Storage::url('file.jpg');

//  获取文件的大小(以字节为单位)
$size = Storage::size('file.jpg');

//  返回文件最后一次被修改的 UNIX 时间戳
$time = Storage::lastModified('file.jpg');

//  put 方法可用于将原始文件内容保存到磁盘上,强烈建议在处理大文件时使用
Storage::put('file.jpg', $contents);
Storage::put('file.jpg', $resource);

//  下载文件
return Storage::download('file.jpg', $name, $headers);

// 使用 putFile 或 putFileAs 方法,将给定文件流式传输到你的存储位置
Storage::putFile('photos', new File('/path/to/photo')); // 自动为文件名生成唯一的ID...
Storage::putFileAs('photos', new File('/path/to/photo目录名'), 'photo.jpg');    // 手动指定文件名...
//  如果你将文件存储在诸如 S3 的云盘上,并且想让该文件公开访问,则可以使用以下功能:
Storage::putFile('photos', new File('/path/to/photo'), 'public');

//  文件数据写入
Storage::prepend('file.log', 'Prepended Text'); //  在文件的开头写入数据
Storage::append('file.log', 'Appended Text');   //  在文件的结尾写入数据

//  复制和移动文件
Storage::copy('old/file.jpg', 'new/file.jpg');
Storage::move('old/file.jpg', 'new/file.jpg');

//  删除文件
Storage::delete('file.jpg');
Storage::delete(['file.jpg', 'file2.jpg']);

跨应用调用

Weird Laravel 5 caching using wrong database name 【问题】:

  • windows11系统专业版
  • web容器是apache2
  • 本地Laravel5.6项目A 通 内部接口调用 本地Laravel5.6项目B
  • B项目的sql查询报错,错误信息:Adatabase.Btable 不存在

【探究】:

  • 测试:在B项目打印 config() 、env() 参数,显示的结果和 B项目 .env 文件不一致
  • 原因:config 缓存

【方法】:php artisan config:clear

中文语言包

composer require caouecs/laravel-lang:~3.0

ide助手 - PHPStorm

可以实现 app(ClassName::class)->functionName($params); 跳转到方法所在位置

composer require barryvdh/laravel-ide-helper
  • 配置 "IdeHelperServiceProvider::class," 到 config/app.php 的 providers
  • 安装插件的项目,在 PHPStorm PHP/laravel 勾选 Enable plugin for this project
php artisan ide-helper:generate   //  生成Facades注释 
php artisan ide-helper:models     //  生成数据模型注释 -- 可以不执行
php artisan ide-helper:meta       //  生成 PhpStorm Meta file 
  • PHPStorm 文件/从磁盘全部重新加载
  • PHPStorm 文件/清除缓存

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK