panique / mini
一个非常简单的裸PHP应用程序
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-09-17 22:57:08 UTC
README
MINI
MINI是一个非常简单且易于理解的PHP应用程序框架,简化到极致。MINI不是一个专业框架,它不包含真实框架所拥有的所有功能。如果您只想展示一些页面,执行一些数据库调用以及少量的AJAX操作,而不需要阅读复杂的专业框架的庞大文档,那么MINI可能非常适合您。MINI易于安装,几乎在任何地方都可以运行,并且不会使事情比必要更加复杂。
要深入了解MINI,请参阅以下博客文章:MINI,一个非常简单的PHP应用程序框架。
特性
- 非常简单,易于理解
- 结构简单但整洁
- 生成“美观”的干净URL
- 示例CRUD操作:轻松创建、读取、更新和删除数据库条目
- 示例AJAX调用
- 尽量遵循PSR 1/2编码规范
- 使用PDO进行所有数据库请求,附带一个额外的PDO调试工具来模拟SQL语句
- 有注释的代码
- 仅使用原生PHP代码,因此人们不需要学习框架
MINI的分支
TINY
MINI还有一个较小的兄弟,名为TINY。它与MINI类似,但在几乎所有环境中都可以不使用mod_rewrite运行。不适合用于实时网站,但非常适合快速原型设计。
MINI2
MINI还有一个较大的兄弟,名为MINI2。它更简单,使用Slim构建,并具有SASS编译、Twig等优秀特性。
MINI3
MINI3是MINI的继任者,使用原始MINI1原生应用程序结构(不包含底层的Slim),但具有适当的PSR-4自动加载、多个模型类和真实命名空间。
要求
- PHP 5.3.0+(首次发布时),现在它可以很好地与当前的稳定版本PHP 5.6、7.1、7.2、7.3和7.4一起工作。最新的PHP 8.0尚未测试,但应该也能正常工作。
- MySQL
- mod_rewrite已启用(以下有教程,还有TINY,这是MINI的无mod_rewrite版本)
安装(在Vagrant中,100%自动)
如果您使用Vagrant进行开发,则可以通过一键(或命令行中的一条命令)安装MINI [Vagrant文档]。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 64位操作系统添加到 Vagrant(除非您已经安装了它),然后执行 vagrant up
来运行虚拟机。安装完成后,您可以直接在 192.168.33.44
上使用完全安装的演示应用程序(您可以在 Vagrantfile 中更改此地址)。由于这是一个快速演示环境,MySQL 根密码和 PHPMyAdmin 根密码都设置为 12345678
,项目安装在与 /var/www/html/myproject
。您当然可以在 bootstrap.sh
中更改这些设置。使用 vagrant halt
关闭虚拟机。
在 Ubuntu 14.04 LTS 上的自动安装(30秒内完成)
您可以通过下载一个文件并执行它来轻松安装 MINI,包括 Apache、MySQL、PHP 和 PHPMyAdmin、mod_rewrite、Composer、所有必要的设置甚至配置文件中的密码。整个安装将自动运行100%。在本文的教程中查找:[在 Ubuntu 14.04 LTS 中30秒内安装 MINI](http://www.dev-metal.com/install-mini-30-seconds-inside-ubuntu-14-04-lts/)
安装
- 编辑
application/config/config.php
中的数据库凭据。 - 在
_install/
目录中执行 .sql 语句(例如,使用 PHPMyAdmin)。 - 请确保您的服务器/环境中已启用 mod_rewrite。一些指南:[Ubuntu 14.04 LTS](http://www.dev-metal.com/enable-mod_rewrite-ubuntu-14-04-lts/)、[Ubuntu 12.04 LTS](http://www.dev-metal.com/enable-mod_rewrite-ubuntu-12-04-lts/)、[Windows 上的 EasyPHP](http://www.dev-metal.com/enable-mod_rewrite-ubuntu-14-04-lts/)、[Windows/Mac OS 上的 AMPPS](http://www.softaculous.com/board/index.php?tid=3634&title=AMPPS_rewrite_enable/disable_option%3F_please%3F)、[Windows 上的 XAMPP](http://www.leonardaustin.com/blog/technical/enable-mod_rewrite-in-xampp/)、[Mac OS 上的 MAMP](http://stackoverflow.com/questions/7670561/how-to-get-htaccess-to-work-on-mamp)
MINI 不需要进一步配置即可运行。您也可以将其放入子文件夹中,它将无需进一步配置即可运行。也许这个简单的教程有用:[如何在 Ubuntu 14.04 LTS 上安装 LAMPP](http://www.dev-metal.com/installsetup-basic-lamp-stack-linux-apache-mysql-php-ubuntu-14-04-lts/) 和 [Ubuntu 12.04 LTS 上的相同操作](http://www.dev-metal.com/setup-basic-lamp-stack-linux-apache-mysql-php-ubuntu-12-04/)
服务器配置
nginx
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 设置的更深入讨论,请参阅 [这里](https://github.com/panique/mini/issues/55)
安全
脚本使用 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);
为什么将 "Error" 类重命名为 "Problem"?
该项目在 PHP5 上编写了多次,但随着 PHP7 的发布,已无法将类命名为 "Error",因为 PHP 本身现在有一个内部的 Error 类。重命名是与其他选项(如 "ErrorController" 等)相比最简单的解决方案,后者会带来新的问题,例如文件名大写等(这在某些配置上可能无法正常工作)。
许可证
本项目采用 MIT 许可证。这意味着您可以免费用于私人或商业项目。
我的博客
顺便说一下,我还在Dev Metal
上写博客。[a href="http://www.dev-metal.com" rel="nofollow noindex noopener external ugc">Dev Metal。
快速入门
总体结构
应用的URL路径直接转换为控制器(=文件)及其在application/controllers中的应用程序内的方法。
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控制器(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'; }
数据处理
让我们看看位于songs控制器(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上分享的。它是完全免费的,适用于个人和商业用途。如果你不喜欢它,就不要使用它。如果你看到问题,请写一个票据(如果你真的很酷:我非常感谢任何提交!)但不要攻击,不要抱怨,不要仇恨。只有坏人才这样做。
贡献
请提交到develop分支(其中包含开发版本),而不是master分支(其中包含经过测试和稳定的版本)。
变更日志
2002年12月
- [panique] 更新了Vagrant安装程序,使其在PHP 7.4和Ubuntu 20.04上运行
2016年8月
- [codebicycle/panique] 将Error类重命名为Problem,以使其与PHP7兼容 #209
- [ynohtna92/panique] 现在URL协议是协议无关的 #208
2015年2月
- [jeroenseegers] nginx设置配置
2014年12月
- [panique] css修复
- [panique] 将控制器/视图重命名为单数
- [panique] 在PDO创建时添加了charset(增加了安全性)
2014年11月
- [panique] Vagrant的自动安装脚本
- [panique] 基本文档
- [panique] PDO-debugger现在是一个静态辅助方法,不再是全局函数了
- [panique] 文件夹重命名
- [reg4in] JS AJAX调用现在即使在子文件夹中使用脚本也能正常运行
- 【panique】移除了所有“模型”,现在使用一个模型文件
- 【panique】完整的项目重命名,重新品牌化
2014年10月
- 【tarcnux/panique】PDO调试
- 【panique】演示ajax调用
- 【panique】改进的输出转义
- 【panique】将/libs重命名为/core
- 【tarcnux】基本的CRUD(创建/读取/更新/删除)示例现在有U(更新)
- 【panique】URL现在是无需配置的,应用程序会检测URL和子目录
- 【elysdir】htaccess现在有一些好的说明性注释
- 【bst27】非现有控制器/方法的回退
- 【panique】回退现在将显示错误页面
- 【digitaltoast】修复URL拆分以使php-mvc在nginx上无缝工作
- 【AD7six】安全改进:将index.php移动到/public,路由所有请求到/public
2014年9月
- 【panique】添加了支持论坛的链接
- 【panique】添加了Facebook页面的链接
2014年8月
- 【panique】在README中进行了多项更改,捐赠按钮更改
2014年6月
- 【digitaltoast】从头部移除了X-UA-Compatible元标签(因为现在不再需要了)
- 【digitaltoast】从jQuery URL中移除了协议(现代加载外部文件的方式,使其独立于协议更改)
- 【digitaltoast】将jQuery从2.1降级到1.11,以避免与IE7/8工作时的问题(jQuery 2已停止对IE7/8的支持)
- 【panique】将jQuery加载移动到页脚(以避免页面渲染阻塞)
2014年4月
- 【panique】更新了jQuery链接到2.1
- 【panique】现在可以有超过3个参数(具体的参数)
- 【panique】更简洁的参数处理方式
- 【panique】较小的清理和改进
- 【panique】Apache 2.4安装信息
2014年1月
- 【panique】修复了当存在名为“index”的控制器和基础index.php时的.htaccess问题(它们发生冲突)
支持该项目
通过在DigitalOcean租赁服务器或只需在BuyMeACoffee.com上点一杯咖啡来支持该项目。谢谢! :)