caiochami/bundles

非Laravel项目使用的Laravel工具集

v1.9 2020-12-16 01:49 UTC

This package is auto-updated.

Last update: 2024-09-16 09:54:15 UTC


README

为非Laravel项目提供的类似Laravel的工具集

安装

[composer] composer require caiochami/bundles

用法

Request类收集并验证所有HTTP输入数据。如果验证结束时发现错误,将以json格式显示信息。如果头部没有"Content-Type: application/json",则此行为将改变,它会将错误和附加到$_SESSION变量的请求数据重定向到前一页。

  1. 实例化Request类。当使用"exists"规则时,需要传递PDO实例。
  2. 指定规则
  3. (可选)指定自定义消息

假设我们发送一个包含以下数据的json请求。

[
    "name" : "John Doe",
    "city" : "",
    "password" : "12345678",
    "password_confirmation" : "1234568",
    "id" : null,
    "patients": [
        {
            "name": "Foo",
            "age": 2
        },
        {
            "name": "Bar",
            "age": 10
        }
    ]
];

验证将如下所示

require "vendor/autoload.php";

header("Content-Type: application/json;");

use Bundles\Request;

$request = new Request;

//all empty string variables are converted to null automatically
$request->validate([
    "name" => ["required","string", "minimum:3", "maximum:100"],
    "password" => ["required", "string", "confirmed"],
    "id" => ["nullable", "integer"],
    "patients" => ["required", "array", "gte:1"],
    "patients.*.name" => ["required", "string"],
    "patients.*.age" => ["required", "integer"]
],
[
    "required" => "The field %s is required"
]);

假设我们有一个用户表和地址表。模型类包含创建、更新、删除和查询条目的所有所需方法。查看以下代码

 require "vendor/autoload.php";

 use Bundles\Model;
 use Bundles\DatabaseConnection as Database;

 class User extends Model
 {

    protected static $tableName = "users";

    protected static $columns = "id,name,address.city";

    protected static $joins = "";

    protected static $key = "id";

    public function addresses(){
        $addresses = DB::use(self::$conn)
        ->table('addresses')
        ->select(['id', 'city'])
        ->where('user_id', $this->id)
        ->retrieve()
        ->get();
   
        $this->addresses = $addresses;
   
    }

 }

class Address extends Model
 {

    protected static $tableName = "addresses";

    protected static $columns = "id,city";

    protected static $joins = "";

    protected static $key = "id";

    protected static $fillable = [ "city" ];

    public function user(){
        $user = DB::use(self::$conn)
        ->table('users')
        ->select(['id', 'name'])
        ->where('id', $this->id)
        ->retrieve()
        ->first();
   
        $this->user = $user;
   
    }

    //mutator
    
    public function setCityAttribute($value){
        return strtolower($value);
    }


 }

 $connection = Database::attempt([
    "db_host" =>  "HOST",
    "db_name" =>  "NAME",
    "db_user" =>  "USER",
    "db_psw" =>  "PASSWORD"
])

 //creating a user
 $user = new User($connection);
 $user->name = "Foo";
 $user->save();

 //or

 $address = Address::create(["city"=> "My homeland"]);

 //finding and updating the user

 $user = User::find($connection, 1); 
 //or 
 $address = Address::use($connection)->where("id", 1)->first();

 $user->name = "Bar";
 $user->save();

 //or

 User::update($connection, 1, [
     "name" => "Bar"
 ]);

 // deleting a user

 User::destroy($connection, 1);

 $user = User::find($connection, 1);
 $user->delete();

 //querying all addresses

 Address::all($connection);

 //or more specific

 User::use($connection)
 ->where("name", "LIKE", "%bar%")
 ->whereBetween("birthday", "1993-01-01", "2020-01-01"),
 ->orWhere("address.city", "California")
 ->with(['addresses'])
 ->limit(15)
 ->retrieve()
 ->get();


//for debugging you can pass an array just like this
User::find($connection, 1, ["debug" => true]);

//or 

User::where("birthday", ">", "1972-11-11")
->orderBy(["name", "DESC"])
->retrieve(["debug" => true, "show_query" => true ])
->get(); 

更多示例,请查看examples/文件夹