panique/mini

一个非常简单的裸PHP应用程序

安装: 130

依赖项: 0

建议者: 0

安全: 0

星星: 1,349

关注者: 112

分支: 478

开放问题: 21

类型:项目

dev-develop 2022-09-17 18:36 UTC

This package is auto-updated.

Last update: 2024-09-17 22:57:08 UTC


README

MINI - A naked barebone PHP application

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 目录中的 Vagrantfilebootstrap.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/)

安装

  1. 编辑 application/config/config.php 中的数据库凭据。
  2. _install/ 目录中执行 .sql 语句(例如,使用 PHPMyAdmin)。
  3. 请确保您的服务器/环境中已启用 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上点一杯咖啡来支持该项目。谢谢! :)

Buy Me A Coffee