📜  asd - PHP (1)

📅  最后修改于: 2023-12-03 14:39:21.551000             🧑  作者: Mango

asd - PHP

asd - PHP 是一个基于 PHP 开发的轻量级 MVC 框架。它的设计目标是简单易用,同时具备足够的灵活性和扩展性,方便开发者快速构建高性能的 Web 应用。

特点
  • 简单易用:asd - PHP 框架的实现非常简单,易于理解和上手。即使没有 MVC 框架的使用经验,也能快速学会并开始开发。
  • 高效灵活:asd - PHP 框架采用自己实现的路由,采用轻量级的模板引擎,可以在不损失灵活性的同时提升应用性能。
  • 数据库支持:框架内置了数据库 ORM 接口,支持主流的 MySQL 和 PostgreSQL 数据库。
  • 扩展性:支持第三方库的集成,方便快捷地扩展功能。同时框架采用依赖注入的方式,方便替换和升级内部组件。
安装和使用

asd - PHP 框架的安装非常简单,只需要执行以下命令即可:

composer create-project asd-php/asd myapp

然后到应用目录中运行以下命令启动内置的 Web 服务器:

php -S localhost:8000 -t public

现在可以在浏览器中访问 http://localhost:8000 ,看到欢迎界面,说明 asd - PHP 框架已成功安装。

路由

asd - PHP 框架的路由非常灵活,支持各种不同的路由规则。默认情况下,框架使用基于 URL 路径的路由规则。

  • / 显示默认欢迎页面
  • /users 显示用户列表
  • /user/{id} 显示指定用户详情,{id} 为动态路由参数

以上路由规则可以在 app/routes.php 文件中定义,例如:

use App\Controllers\HomeController;
use App\Controllers\UserController;

$router->get('/', [HomeController::class, 'welcome']);

$router->get('/users', [UserController::class, 'index']);

$router->get('/user/{id}', [UserController::class, 'show']);

此外,还可以定义类似于 RESTful 风格的路由规则:

  • GET /users 显示用户列表
  • GET /users/{id} 显示指定用户详情,{id} 为动态路由参数
  • POST /users 创建新用户
  • PUT /users/{id} 更新指定用户
  • DELETE /users/{id} 删除指定用户

这些路由规则可以通过 Route 类中的 RESTful 方法实现:

use App\Controllers\UserController;

$router->rest('users', UserController::class);
控制器

控制器是 MVC 框架中的关键组件,用于接收和处理用户请求,并返回响应。在 asd - PHP 框架中,控制器可以通过命名空间来组织,按照 RESTful 风格的路由规则,一个资源对应一个控制器类。

例如,UserController 控制器用于处理 /users/user/{id} 路由:

namespace App\Controllers;

use Asd\Http\Request;
use Asd\Http\Response;

class UserController
{
    public function index(Request $request): Response
    {
        // 处理用户列表逻辑
    }

    public function show(Request $request, int $id): Response
    {
        // 处理指定用户详情逻辑
    }

    public function create(Request $request): Response
    {
        // 处理创建新用户逻辑
    }

    public function update(Request $request, int $id): Response
    {
        // 处理更新指定用户逻辑
    }

    public function delete(Request $request, int $id): Response
    {
        // 处理删除指定用户逻辑
    }
}
模板引擎

asd - PHP 框架采用轻量级的模板引擎,可以方便地实现模板的继承、变量替换、循环遍历等功能。

模板文件通常放在 app/views 目录下,文件名采用 .html 后缀。下面是一个简单的模板示例:

<!DOCTYPE html>
<html>
<head>
    <title>{title}</title>
</head>
<body>
    <h1>{title}</h1>
    <ul>
        {% for user in users %}
        <li>{{ user }}</li>
        {% endfor %}
    </ul>
</body>
</html>

该模板中包含一个标题和一个用户列表,使用双括号语法 {{ }} 输出变量,使用单括号语法 {% %} 表示控制语句。

渲染模板可以使用 View 类中的 render 方法:

use Asd\View;

$html = View::render('welcome', [
    'title' => 'Hello, world!',
    'users' => ['Alice', 'Bob', 'Charlie'],
]);
数据库 ORM

asd - PHP 框架内置了一个简单的数据库 ORM 接口,用于实现 CRUD 操作。默认情况下,框架采用 PDO 连接 MySQL 数据库,也可以自行扩展支持 PostgreSQL 等数据库。

ORM 接口定义了常见的数据操作方法,例如:

namespace Asd\Database;

interface RepositoryInterface
{
    public function all();

    public function find(int $id);

    public function create(array $attributes);

    public function update(int $id, array $attributes);

    public function delete(int $id);
}

可以通过继承 Repository 类来实现具体的数据操作:

namespace App\Repositories;

use Asd\Database\Repository;

class UserRepository extends Repository
{
    protected string $table = 'users';
}

在控制器中调用数据操作方法即可:

namespace App\Controllers;

use App\Repositories\UserRepository;
use Asd\Http\Request;
use Asd\Http\Response;

class UserController
{
    protected UserRepository $repository;

    public function __construct(UserRepository $repository)
    {
        $this->repository = $repository;
    }

    public function index(Request $request): Response
    {
        $users = $this->repository->all();

        return view('users.index', [
            'users' => $users,
        ]);
    }

    public function show(Request $request, int $id): Response
    {
        $user = $this->repository->find($id);

        return view('users.show', [
            'user' => $user,
        ]);
    }

    public function create(Request $request): Response
    {
        $attributes = $request->input();

        $user = $this->repository->create($attributes);

        return redirect('/users/' . $user->id);
    }

    public function update(Request $request, int $id): Response
    {
        $attributes = $request->input();

        $this->repository->update($id, $attributes);

        return redirect('/users/' . $id);
    }

    public function delete(Request $request, int $id): Response
    {
        $this->repository->delete($id);

        return redirect('/users');
    }
}
扩展性

asd - PHP 框架的扩展性非常强,支持使用第三方库、组件、中间件等方式扩展功能。

例如,可以集成 Eloquent ORM 来替换框架自带的 ORM 接口:

composer require illuminate/database

然后需要创建一个适配器类来实现 RepositoryInterface 接口:

namespace App\Database;

use Asd\Database\RepositoryInterface;
use Illuminate\Database\Eloquent\Model;

class EloquentAdapter implements RepositoryInterface
{
    protected Model $model;

    public function __construct(Model $model)
    {
        $this->model = $model;
    }

    public function all()
    {
        return $this->model->all();
    }

    public function find(int $id)
    {
        return $this->model->findOrFail($id);
    }

    public function create(array $attributes)
    {
        return $this->model->create($attributes);
    }

    public function update(int $id, array $attributes)
    {
        $record = $this->find($id);

        $record->update($attributes);
    }

    public function delete(int $id)
    {
        $this->model->destroy($id);
    }
}

然后在控制器中使用 EloquentAdapter 来执行数据操作:

namespace App\Controllers;

use App\Database\EloquentAdapter;
use App\Models\User;
use Asd\Http\Request;
use Asd\Http\Response;

class UserController
{
    protected EloquentAdapter $repository;

    public function __construct(EloquentAdapter $repository)
    {
        $this->repository = $repository;
    }

    public function index(Request $request): Response
    {
        $users = $this->repository->all();

        return view('users.index', [
            'users' => $users,
        ]);
    }

    public function show(Request $request, int $id): Response
    {
        $user = $this->repository->find($id);

        return view('users.show', [
            'user' => $user,
        ]);
    }

    public function create(Request $request): Response
    {
        $attributes = $request->input();

        $user = $this->repository->create($attributes);

        return redirect('/users/' . $user->id);
    }

    public function update(Request $request, int $id): Response
    {
        $attributes = $request->input();

        $this->repository->update($id, $attributes);

        return redirect('/users/' . $id);
    }

    public function delete(Request $request, int $id): Response
    {
        $this->repository->delete($id);

        return redirect('/users');
    }
}
总结

asd - PHP 框架是一个非常轻量级的 MVC 框架,简单易用,同时具备足够的灵活性和扩展性。它采用 PHP 原生语法和设计模式,可以快速构建高性能的 Web 应用,并支持使用第三方组件和库来扩展功能。如果你不喜欢重量级的框架,那么 asd - PHP 可能是一个不错的选择。