MINI 是一个极其简单且易于理解的框架 PHP 应用程序,最大限度地简化了。 MINI 不是一个专业的框架,它不具备真正框架所具有的所有功能。如果您只想显示一些页面,进行一些数据库调用和一点点 AJAX,而不需要阅读高度复杂的专业框架的大量文档,那么 MINI 可能对您非常有用。 MINI 易于安装,几乎可以在任何地方运行,并且不会使事情变得不必要的复杂。
要更深入地介绍 MINI,请查看这篇博文:MINI,一个极其简单的准系统 PHP 应用程序。
MINI 有一个较小的兄弟,名为 TINY。它与 MINI 类似,但几乎在所有环境中都无需 mod_rewrite 即可运行。不适合实时网站,但适合快速原型设计。
MINI 还有一个更大的兄弟,名为 MINI2。它甚至更简单,是使用 Slim 构建的,并且具有 SASS 编译、Twig 等不错的功能。
MINI3是MINI的后继者,使用原始的MINI1本机应用程序结构(在引擎盖下没有Slim),但具有适当的PSR-4自动加载、多个模型类和真实的命名空间。
如果您使用 Vagrant 进行开发,那么您可以一键(或命令行上的一个命令)安装 MINI [Vagrant doc]。 MINI 附带一个演示 Vagrant 文件(定义您的 Vagrant 盒子)和一个演示 bootstrap.sh,它会自动安装 Apache、PHP、MySQL、PHPMyAdmin、git 和 Composer,在 MySQL 和 PHPMyadmin 甚至应用程序代码中设置选定的密码,下载 Composer 依赖项,激活 mod_rewrite 并编辑 Apache 设置,从 GitHub 下载代码并运行演示 SQL 语句(用于演示数据)。这是 100% 自动的,您将在 +/- 5 分钟后在 Ubuntu 14.04 LTS Vagrant 盒子内完全运行 MINI2 安装。
为此,请将_vagrant
中的Vagrantfile
和bootstrap.sh
放入文件夹中(仅此而已)。执行vagrant box add ubuntu/focal64
将 Ubuntu 20.04 LTS 64bit 添加到 Vagrant(除非您已经拥有它),然后执行vagrant up
来运行该框。安装完成后,您可以直接在192.168.33.44
上使用完全安装的演示应用程序(您可以在 Vagrantfile 中更改此设置)。由于这只是一个快速演示环境,MySQL root 密码和 PHPMyAdmin root 密码设置为12345678
,该项目安装在/var/www/html/myproject
中。您可以在bootstrap.sh
中确定更改此设置。用vagrant halt
关闭盒子
您只需下载一个文件并执行即可安装 MINI,包括 Apache、MySQL、PHP 和 PHPMyAdmin、mod_rewrite、Composer、所有必要的设置,甚至配置文件中的密码,整个安装将 100% 自动运行。在这篇博客文章中找到教程:在 Ubuntu 14.04 LTS 中在 30 秒内安装 MINI
application/config/config.php
中编辑数据库凭据_install/
文件夹中的 .sql 语句(例如 PHPMyAdmin)。MINI 无需任何进一步配置即可运行。您还可以将其放入子文件夹中,无需任何进一步配置即可运行。也许有用:关于如何在 Ubuntu 14.04 LTS 上安装 LAMPP(Linux、Apache、MySQL、PHP、PHPMyAdmin)的简单教程以及 Ubuntu 12.04 LTS 的相同教程。
server {
server_name default_server _; # Listen to any servername
listen [::]:80;
listen 80 ;
root /var/www/html/myproject/public;
location / {
index index.php;
try_files / $uri / $uri / /index.php?url= $uri ;
}
location ~ .(php)$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ;
include fastcgi_params;
}
}
关于 nginx 设置的更深入的讨论可以在这里找到。
该脚本利用 mod_rewrite 并阻止对 /public 文件夹之外的所有内容的所有访问。您的 .git 文件夹/文件、操作系统临时文件、应用程序文件夹和其他所有内容都无法访问(如果设置正确)。对于数据库请求,使用 PDO,因此无需考虑 SQL 注入(除非您使用的是极其过时的 MySQL 版本)。
MINI 附带了一些定制的 PDO 调试器工具(在 application/libs/helper.php 中找到代码),尝试模拟您的 PDO-SQL 语句。它非常容易使用:
$ sql = " SELECT id, artist, track, link FROM song WHERE id = :song_id LIMIT 1 " ;
$ query = $ this -> db -> prepare ( $ sql );
$ parameters = array ( ' :song_id ' => $ song_id );
echo Helper:: debugPDO ( $ sql , $ parameters );
$ query -> execute ( $ parameters );
该项目是用 PHP5 编写的,但是随着 PHP7 的发布,不再可能将类命名为“Error”,因为 PHP 本身现在有一个内部 Error 类。与“ErrorController”等其他选项相比,重命名是最简单的解决方案,这会添加大写文件名等新问题(在某些设置上无法正常工作)。
该项目已获得 MIT 许可证的许可。这意味着您可以在私人或商业项目中免费使用和修改它。
顺便说一句,我还在 Dev Metal 上写博客。
应用程序的 URL 路径直接转换为应用程序/控制器内的控制器(=文件)及其方法。
example.com/home/exampleOne
将按照 application/controllers/home.php 中的exampleOne()方法执行操作。
example.com/home
将按照 application/controllers/home.php 中的index()方法执行操作。
example.com
将按照 application/controllers/home.php 中的index()方法执行操作(默认回退)。
example.com/songs
将按照 application/controllers/songs.php 中的index()方法执行操作。
example.com/songs/editsong/17
将按照 application/controllers/songs.php 中的editsong()方法执行操作,并将17
作为参数传递给它。
不言自明,对吧?
让我们看一下 home-controller (application/controllers/home.php) 中的 exampleOne() 方法:这仅显示页眉、页脚和 example_one.php 页面(在 views/home/ 中)。意图尽可能简单和原生。
public function exampleOne ()
{
// load view
require APP . ' views/_templates/header.php ' ;
require APP . ' views/home/example_one.php ' ;
require APP . ' views/_templates/footer.php ' ;
}
让我们看看歌曲控制器(application/controllers/songs.php)中的index()方法:与exampleOne类似,但这里我们也请求数据。同样,一切都极其简化和简单:$this->model->getAllSongs() 只需调用 application/model/model.php 中的 getAllSongs() 方法。
public function index ()
{
// getting all songs and amount of songs
$ songs = $ this -> model -> getAllSongs ();
$ amount_of_songs = $ this -> model -> getAmountOfSongs ();
// load view. within the view files we can echo out $songs and $amount_of_songs easily
require APP . ' views/_templates/header.php ' ;
require APP . ' views/songs/index.php ' ;
require APP . ' views/_templates/footer.php ' ;
}
为了极其简单,所有数据处理方法都位于 application/model/model.php 中。这肯定不是很专业,但却是最简单的实现。看看 model.php 中的 getAllSongs() 是什么样子:纯粹且超级简单的 PDO。
public function getAllSongs ()
{
$ sql = " SELECT id, artist, track, link FROM song " ;
$ query = $ this -> db -> prepare ( $ sql );
$ query -> execute ();
return $ query -> fetchAll ();
}
然后,结果(此处为 $songs)可以轻松地直接在视图文件中使用(在本例中为 application/views/songs/index.php,是一个简化的示例):
<tbody>
<?php foreach ( $ songs as $ song ) { ?>
<tr>
<td> <?php if ( isset ( $ song -> artist )) echo htmlspecialchars ( $ song -> artist , ENT_QUOTES , ' UTF-8 ' ); ?> </td>
<td> <?php if ( isset ( $ song -> track )) echo htmlspecialchars ( $ song -> track , ENT_QUOTES , ' UTF-8 ' ); ?> </td>
</tr>
<?php } ?>
</tbody>
MINI 是 php-mvc 的继承者。由于 php-mvc 没有提供真正的 MVC 结构(并且有几个人抱怨这一点 - 这是完全正确的!)我已经重命名并重建了该项目。
... MINI 只是我为日常工作创建的一个简单的辅助工具,只是因为它比真正的框架更容易设置和处理。对于日常代理工作、快速原型设计和前端驱动的项目来说,这是完全没问题的,可以完成工作,并且绝对没有理由讨论为什么它“与 Laravel 相比很糟糕”,为什么它不遵循几个 MVC 原则,或者为什么没有个人无偿支持或者没有俄语翻译或类似的奇怪的东西。针对开源项目(及其作者)的攻击确实达到了疯狂的程度。
我在空闲时间自愿无偿编写了这篇文章,并将其上传到 GitHub 上进行分享。它完全免费,可供私人和商业用途。如果您不喜欢它,请不要使用它。如果您发现问题,请写一张票(如果您真的很酷:我非常感谢您的任何提交!)。但不要抨击,不要抱怨,不要仇恨。只有坏人才会这么做。
请提交到开发分支(包含正在开发的版本),而不是提交到主分支(包含经过测试的稳定版本)。
2002年12月
2016年8月
2015年2月
2014年12月
2014年11月
2014年10月
2014年9月
2014年8月
2014年6月
2014年4月
2014年1月
通过在 DigitalOcean 租用服务器或在 BuyMeACoffee.com 上给一杯咖啡小费来支持该项目。谢谢! :)