robertwesner / simple-mvc-php
一个用于创建PHP网络服务器的轻量级库。
v0.2.0
2024-08-26 17:28 UTC
Requires
- php: ^8.3
- guzzlehttp/psr7: ^2.7
- twig/twig: ^3.0
Requires (Dev)
- phpunit/phpunit: ^11.3.1
- squizlabs/php_codesniffer: ^3.10.2
README
PHP简单MVC框架
一个用于创建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']
作为可调用对象