mardira/mardira-framework

Mardira 框架

v1.1.6 2023-11-12 19:12 UTC

README

Mardira Logo

Mardira 框架是一个基于模型控制器(MVC)模式的 PHP 框架,用于构建 Web 应用程序和 API。它设计得简单且高效。

Total Downloads Total Stars Total Forks Version License

目录

需求

  • PHP = 7.4
  • MySQL >= 5.7.8
  • Apache >= 2.4.41
  • Composer >= 2.0.9

文件夹结构

mardira-framework
├── App
│   ├── Controllers
│   │   ├── AuthController.php
│   ├── Core
│   │   ├── Commands
│   ├── Database
│   │   ├── Migrations
│   │   │   ├── 2023_01_31_xxxxxx_create_table_users.php
│   │   │   ├── 2023_01_31_xxxxxx_create_table_roles.php
│   │   ├── Seeders
│   │   │   ├── GlobalSeeder.php
│   ├── Helpers
│   ├── Middleware
│   ├── Models
│   ├── Packages
│   ├── Routes
│   │   ├── Api.php

安装

设置

您可以使用 composer 创建新项目

composer create-project mardira/mardira-framework <your_project_name>

或者您也可以克隆此项目

克隆

  • 使用 `git clone` 命令将此仓库克隆到本地机器上
  git clone https://github.com/Bootcamp-STMIK-Mardira-Indonesia/mardira-framework.git

然后,使用 composer 安装依赖

composer install

或者

composer update

使用方法

启动服务器

php mardira serve

或者

php mardira serve --port=<your_port>

创建 .env 文件

您可以使用命令创建 .env 文件

php mardira make:env

创建控制器

php mardira make:controller ControllerName

创建模型

php mardira make:model ModelName

创建路由

php mardira make:route route_name --controller=ControllerName

创建迁移

php mardira make:migration create_table_table_name

运行迁移

如果数据库不存在,将自动从 .env 中创建数据库

php mardira migrate

刷新迁移

php mardira migrate:refresh

使用种子刷新迁移

php mardira migrate:refresh --seed

创建种子

php mardira make:seeder SeederName

运行种子

php mardira db:seed

运行特定种子

php mardira db:seed --class=SeederName

创建认证

php mardira make:auth

刷新认证

php mardira make:auth --refresh

更新框架版本

php mardira update

控制器

使用 php mardira make:controller ControllerName 命令创建控制器,以下是一个示例控制器

<?php

namespace App\Controllers;

use App\Core\Controller;

class HomeController extends Controller
{
    public function index()
    {
        $this->response(200,[
            'message' => 'Hello World'
        ]);
    }
}

要使用控制器,您可以在 App/Routes/Api.php 中添加路由

<?php

use App\Core\Route;
use App\Controllers\HomeController;

Route::get('/home', [HomeController::class, 'index']);

响应

您可以在控制器中使用响应

$this->response(200,[
    'message' => 'Hello World'
]);

返回预期的 JSON

{
  "message": "Hello World"
}

另一个响应示例 409

$this->response->json(409,[
    'message' => 'Conflict'
]);

模型

使用 php mardira make:model ModelName 命令创建模型,以下是一个示例模型

<?php

namespace App\Models;

use App\Core\Model;

class User extends Model
{
    protected $table = 'users';
    protected $primaryKey = 'id';
}

要使用模型,您可以在 App/Controllers/ControllerName.php 中添加模型

<?php

namespace App\Controllers;

use App\Core\Controller;
use App\Models\User;

class HomeController extends Controller
{
    public function index()
    {
        $user = User::all();

        $this->response(200,[
            'message' => 'Hello World',
            'data' => $user
        ]);
    }
}

迁移

使用 php mardira make:migration create_table_table_name 命令创建迁移,以下是一个示例迁移

<?php

namespace App\Database\Migrations;

use App\Core\Migration;

return new class extends Migration
{
    public function up()
    {
        $this->schema->create('users', function ($table) {
            $table->increment('id');
            $table->string('name', 50);
            $table->string('email',50)->unique();
            $table->string('password', 64);
            $table->timestamps();
        });
    }

    public function down()
    {
        $this->schema->dropIfExists('users');
    }
}

种子

使用 php mardira make:seeder SeederName 命令创建种子,以下是一个示例种子

<?php

namespace App\Database\Seeders;

use App\Core\Seeder;
use App\Core\QueryBuilder as DB;

class UserSeeder extends Seeder
{
    public function run()
    {
        $data = [
            [
                'name' => 'Administrator',
                'username' => 'admin',
                'email' => 'admin@admin.com',
                'password' => password_hash('password', PASSWORD_DEFAULT),
                'role_id' => 1,
            ],
            [
                'name' => 'User',
                'username' => 'user',
                'email' => 'user@user.com',
                'password' => password_hash('password', PASSWORD_DEFAULT),
                'role_id' => 2,
            ]
        ];
        DB::table('users')->insert($data);
    }
}

中间件

使用 php mardira make:middleware MiddlewareName 命令创建中间件,以下是一个示例中间件

<?php

namespace App\Middleware;

use App\Core\Middleware;
use App\Core\Auth;

class AuthMiddleware extends Middleware
{
    public function handle()
    {
        if (Auth::check()) {
            return $next();
        }
        return $this->response(401, ['message' => 'Unauthorized']);
    }
}

要使用中间件,您可以在路由中添加中间件

Router::get('/schedules', [ScheduleController::class, 'index'], [AuthMiddleware::class]);

路由

您可以在 App/Routes/Api.php 中添加路由

<?php

use App\Core\Route;

Router::get('/home', [HomeController::class, 'index']);

路由分组

您可以在 App/Routes/Api.php 中添加路由分组

<?php

use App\Core\Route;


Router::controller(ProductController::class)->group(function () {
    Router::post('/products/store', 'store');
});

查询构建器

use App\Core\QueryBuilder as DB;

选择

DB::table('users')->select('name', 'email')->get();

WHERE 条件

// equal
DB::table('users')->where('id', 1)->get();

DB::table('users')->where('id', 1, '>')->get();

DB::table('users')->where('id', 1, '<')->get();

DB::table('users')->where('id', 1, '>=')->get();

DB::table('users')->where('id', 1, '<=')->get();

DB::table('users')->where('id', 1, '!=')->get();

DB::table('users')->where('id', 1, '<>')->get();

// like

DB::table('users')->where('name', 'admin', 'like')->get();

DB::table('users')->where('name', 'admin', 'not like')->get();

或 WHERE 条件

DB::table('users')->orWhere('id', 1)->get();

DB::table('users')->orWhere('id', 1, '>')->get();

DB::table('users')->orWhere('id', 1, '<')->get();

DB::table('users')->orWhere('id', 1, '>=')->get();

DB::table('users')->orWhere('id', 1, '<=')->get();

DB::table('users')->orWhere('id', 1, '!=')->get();

DB::table('users')->orWhere('id', 1, '<>')->get();

WHERE IN 条件

DB::table('users')->whereIn('id', [1,2,3])->get();

DB::table('users')->whereNotIn('id', [1,2,3])->get();

WHERE NOT IN 条件

DB::table('users')->whereNotIn('id', [1,2,3])->get();

WHERE NULL 条件

DB::table('users')->whereNull('id')->get();

WHERE NOT NULL 条件

DB::table('users')->whereNotNull('id')->get();

ORDER BY

DB::table('users')->orderBy('id', 'desc')->get();

DB::table('users')->orderBy('id', 'asc')->get();

连接表

DB::table('users')
    ->join('roles', 'users.role_id', '=', 'roles.id')
    ->select('users.*', 'roles.name as role_name')
    ->get();

GROUP BY

DB::table('users')
    ->groupBy('role_id')
    ->get();

INSERT

DB::table('users')->insert([
    'name' => 'user',
    'email' => 'user@user.com',
    'password' => password_hash('password', PASSWORD_DEFAULT),
]);

UPDATE

DB::table('users')->where('id', 1)->update([
    'name' => 'user',
    'email' => 'user@gmail.com',
]);

DELETE

DB::table('users')->where('id', 1)->delete();

COUNT

DB::table('users')->count();

支持

您可以通过以下方式联系我!

  • 网站:[demostmikmi.com](https://demostmikmi.com)