Skip to content

amoydavid/laravel-boot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Laravel-Boot

本地开发环境快速搭建指南

如果需要在本地架设服务器,需要先设置好 .env 文件,这样docker的MySQL的密码会按.env里的设置好。 如果是把代码提交到远程服务器的,不需要在本地跑docker/sail,请跳过此章节。

# 安装依赖,如果本地没有php和composer的话可以使用已经准备好的docker包
chmod u+x ./php-composer.sh
./php-composer.sh install --prefer-dist -vvv

启动 docker 的 mini-sail 环境

# 添加可执行权限
chmod u+x ./sail.sh
# 启动docker
./vendor/bin/sail up -d
# 或使用
./sail.sh up -d

首次运行前需要生成加密串

./sail.sh artisan key:generate

之后就可以顺利使用sail命令了,本地同步数据库结构:sail artisan migrate

使用PHP运行本地服务器:php artisan serve

开发指南

  1. Models 解决持久化问题
  2. Services 解决跨Model并且需要返回结果的
  3. Actions 解决不需要返回结果的动作,如进队列之后要做的事情,不需要返回值的

路由

使用传统路由

可在原本的 routes/api.php 下添加需要的API路由。

使用路由注册商 Registrar

  1. 创建路由注册商 app/Routing/Api/UserRegistrar.php, 实现 \App\Routing\Contracts\RouteRegistrar 接口,并在 map 函数里实现子路由
  2. 将刚刚的注册商挂到 app/Routing/ApiRegistrar.phpprotected array $registrars中,此时 UserRegistrar 成为 ApiRegistrar 的子路由。

路由注册商将覆盖传统路由中的同路径路由。

快速返回 JSON

// 推荐使用这个类,会有提示
use Illuminate\Http\Response;

// 返回正确, code = 0, data为返回值
return Response::ok([
    'token'=>$token
]);

// 返回出错,code=500, message = 出错信息
return Response::fail('出错信息', 500);

// 出错时也可以直接抛ApiException出来
throw new \App\Exceptions\ApiException('出错信息')

Service 如何使用

可直接通过DI获得,或自己在后面new起来。

use App\Http\Controllers\Controller;use App\Http\Requests\Api\User\CreateMiniUserRequest;use App\Services\MiniUserService;use Illuminate\Http\Response;

class UserController extends Controller
{
    //第一个参数始终是Request对象(如果是FormRequest对象会自动验证表单)
    //第二个参数即是通过DI自动实例化的
    public function login(CreateMiniUserRequest $request, MiniUserService $miniUserService) {
        //到这里时,已经经过了表单验证,直接写主要的业务逻辑即可
        
        // service 可以传入 request 参数处理
        // 或传入数组处理
        // 有错误直接对外抛ApiException即可
        $wxUser = $miniUserService->createUser($request);
    
        $token = $wxUser->createToken("API", ['*'], 120); //表示token在120天后过期
        return Response::ok([
            'token' => $token->plainTextToken,
            'expires' => $token->accessToken->expired_at
        ]);
    }
}

表单验证

如果需要表单验证,可写至单独的表单类里。如 app/Http/Requests/User/CreateMiniUserRequest.php 然后在Controller里首个参数的类型换成新的表单类,此时表单会自动验证。表单未验证通过会自动报错。

表单类重要方法:

  • public function rules():array 定义一个验证规则数组,参见 https://learnku.com/docs/laravel/9.x/validation/12219#quick-writing-the-validation-logic ,可用的验证包参见 https://learnku.com/docs/laravel/9.x/validation/12219#available-validation-rules
  • public function attributes():array 定义属性名,验证不通过时会用到此项数据
  • public function messages():array 定义出错的信息。
  • public function authorize():bool 可在这个方法内定义$this->user()是否有权限访问此表单操作

自定义出错信息

public function messages()
{
    return [
        'code.required' => '登录码未提供', // code 未通过 required 规则时报错
    ];
}

public function messages()
{
    return [
        'code' => '登录码字段不正确', // code任一规则未通过时报错
    ];
}

语言包

使用 laravel-lang 官方语言包,主要有以下指令

composer require laravel-lang/common --dev
php artisan lang:add zh_CN
php artisan lang:update

项目下载后直接修改lang目录下的内容即可。不需要再添加和更新了。

权限判断

主要的权限策略在 app\Policies 目录下。 在 controller 中使用 $this->authorize('destroy', $permission); 来判断当前用户是否有权限 destroy $permission, 将会通过$permission的类型交由对应的Policy判断。

超管

users表中id为1的即为超管,其余为普通管理员。

php artisan app:create.admin将创建一个新管理员。

REMI 安装

原始来源

CentOS 7 示例

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install yum-utils
yum install php82-php-cli php82-php-fpm php82-php-gd php82-php-sodium php82-php-pecl-memcached php82-php-mbstring php82-php-mysqlnd php82-php-xml php82-php-pecl-zip php82-php-pecl-redis5 php82-php-bcmath

添加 www-data 用户

groupadd www-data
useradd -d /www -g www-data www-data

修改 nginx 和 php-fpm 的运行用户

确认 /var/lib/nginx/tmp/ 之下的目录都是 www-data:root 归属

nginx 配置

可使用 https://www.digitalocean.com/community/tools/nginx?global.app.lang=zhCN 提供的配置工具执行

反代配置

    # index.html fallback
    location / {
        try_files $uri $uri/ /index.html;
    }

    location ^~ /admin/ {
        alias  /www/admin-front/www/;
    }

    location ^~ /storage/ {
        alias  /www/php-server/current/public/storage/;
    }

    # index.php fallback
    location ~ ^/api/ {
        proxy_pass            http://127.0.0.1:8000;
        proxy_set_header Host $host;
        include               proxy.conf;
        #try_files $uri $uri/ /index.php?$query_string;
    }

PHP配置

server {
    listen 127.0.0.1:8000;
    server_name www.domain.com;
    root /www/php-server/current/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    access_log              /var/log/nginx/php-access.log combined buffer=512k flush=1m;
    error_log               /var/log/nginx/php-error.log warn;

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        #fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

About

Laravel Application skeleton for me.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages