robertwesner/simple-mvc-php

一个用于创建PHP网络服务器的轻量级库。

v0.2.0 2024-08-26 17:28 UTC

This package is auto-updated.

Last update: 2024-09-26 17:36:50 UTC


README

PHP简单MVC框架

License: MIT

一个用于创建PHP网络服务器的轻量级库。

安装

新项目

这将创建一个带有所需文件夹结构的新项目,是使用它的首选方式。

composer create-project robertwesner/simple-mvc-php-template

现有项目

如果您已经有了一个项目,需要引入这个包并手动迁移您的文件。

composer require robertwesner/simple-mvc-php "*"

配置

nginx

server {
    index index.php index.html;
    server_name ...;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html;

    proxy_intercept_errors on;

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

    location ~ /route\.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

使用

项目结构

PROJECT_ROOT
|-- public
|   '-- any publicly accessible data like JS, CSS, images, ...
|-- routes
|   '-- PHP routing scripts
|-- views
|   '-- twig views
|-- src
|-- vendor
'-- route.php

路由脚本

您可以创建任意数量的路由脚本。它们定义了URL与控制器函数或方法之间的映射。

示例

PROJECT_ROOT
'-- routes
|   |-- api.php
|   '-- view.php
'-- views
    '-- main.twig

api.php

<?php

use RobertWesner\SimpleMvcPhp\Route;
use RobertWesner\SimpleMvcPhp\Routing\Request;

Route::post('/api/login', function (Request $request) {
    $password = $request->get('password');
    if ($password === null) {
        return Route::response('Bad Request', 400);
    }

    // ...
    
    return Route::json([
        'success' => $success,
    ]);
});

Route::post('/api/logout', function () {
    // ...
});

view.php

<?php

use RobertWesner\SimpleMvcPhp\Route;
use RobertWesner\SimpleMvcPhp\Routing\Request;

Route::get('/', function () {
    // ...

    return Route::render('main.twig', [
        'loggedIn' => $loggedIn,
    ]);
});

使用控制器类

待办:将 [$controller, 'getWhatever'] 作为可调用对象