承接 eru123/wyue 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

eru123/wyue

Composer 安装命令:

composer require eru123/wyue

包简介

Framework for developing Vite.js application on top of PHP

README 文档

README

Framework for developing Vite.js application on top of PHP

On my recent projects, I've developed different applications using PHP as API and Vue 3 with Vite on the frontend, I successfully combined these technologies into a single project, even worked with Hot Module Replacement (HMR) for development, and added meta data to my Vue application for better Search Engine Optimization (SEO). When I'm starting new projects, I copied the codes from the previous project and use it as my boiler plate, then added new features and functionalities, then I also update the other old project for bug fixes and add the new features from other projects, that's kind of a mess on my part and exhausting, so I decided to create this framework to make my life easier and more organized. As this project helps me build my projects, I hope someone can use it too and give it a try, if you like it you can also leave a star or fund this project, I would also appreciate any feedback.

Features

Routing

To start with routing you must first use the Route namespace

use Wyue\Route;

To understand the route handlers and middlewares, here is an example of how to define a handler function first

$handler = function (Route $context, $result = null) {
    // process handler
}

For the response, you can set the http response status code using code method

$handler = function (Route $context, $result = null) {
    $context->code(202);
    return 'OK'; // response with html/text
}

Think of handlers as data pipelines, where the result of the previous one is passed to the next one

$analyticsHandler = function (Route $context, $result = null) {
    // does not return anything, just processing some background tasks
}

$authHandler = function (Route $context, $result = null) {
    // for the example, we assume that the request failed to send valid credentials so we want to invalidate it
    // if you return false in a handler it will stop processing the next handlers and proceed to process the next routes
    return false;

    // Alternatively, you can just throw an exception with http error codes
    throw new Exception("Forbidden", 403);

    // You could also return a json response by returning an array
    $context->code(403);
    return [
        "code" => 403,
        "error" => "Forbidden",
        "message" => "Please login to access!",
    ];
}

$apiHandler = function (Route $context, $result = null) {
    // since you return false from previous handler, you will not reach this code
}

$route = new Route();
$route->Route('/api/users', $analyticsHandler, $authHandler, $apiHandler);
$route->Route('/api/user/2', $analyticsHandler, $authHandler, $apiHandler);
$route->Route('/api/user/3', $analyticsHandler, $authHandler, $apiHandler);
$route->Route('/api/user/4', $analyticsHandler, $authHandler, $apiHandler);

Using Route method allows you to process routes without restiction on request method, to add a restriction on request method you can use following functions: Get, Post, Put, Patch, Delete

$route = new Route();
$route->Get('/api/user', $analyticsHandler, $apiHandler);
$route->Post('/api/user', $analyticsHandler, $authHandler, $apiHandler);

If you are used with Laravel or Codeigniter, they have some magic to call route handler functions, I somehow implemented their way of calling its route handler functions.

class AuthController {
    public function login(Route $context, $result = null) {
        // process login here
    }

    // ...
}

function loginFunction(Route $context, $result = null) {
    // process login here
}

// Different ways to call route handler functions
$auth = new AuthController();
$route->Post('/login', [$auth, 'login']); // I believe this is the most recommended way for performance reasons
$route->Post('/login', [AuthController::class, 'login']);
$route->Post('/login', 'AuthController@login');
$route->Post('/login', 'AuthController::login');
$route->Post('/login', 'loginFunction');

With Wyue, you can also define a url parameters in different ways and get it's value from the context with Params method

// actual url path: /api/user/1

class UserController {
    public function user(Route $context, $result = null) {
        // process user here
        $id = $context->Params('id', 'default value if id not exist in url');
        // or 
        $id = $context->Params()['id'];
    }
}

$route->Get('/api/user/{id}', 'UserController::user');
$route->Get('/api/user/$id', 'UserController::user');
$route->Get('/api/user/:id', 'UserController::user');

If you want something more complex ways of defining your Routes, try nested routes by creating a new Route inside the handler function

$route->Route('/api', function (Route $route) {
    $route->Route('/user/$id', function (Route $route) {
        $route->Delete('/delete', function (Route $route) {
            // delete user
        })

        $route->Put('/update', function (Route $route) {
            // update user
        })

        return [
            // ... user details
        ];
    });

    $route->Get('/users', function (Route $route) {
        // list users
    });

    return [
        // ... fallback
    ];
})

统计信息

  • 总下载量: 177
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: Apache-2.0
  • 更新时间: 2024-09-26