panique / mini3
This package is auto-updated.
Last update: 2024-09-20 22:09:03 UTC
README
MINI3
MINI3是一个非常简单且易于理解的PHP应用骨架,简化到极致。MINI3不是一个专业框架,并且不包含真实框架所拥有的所有功能。如果您只想展示一些页面,进行一些数据库调用和一点点的AJAX,而不需要阅读复杂专业框架的大量文档,那么MINI3可能对您非常有用。MINI3易于安装,几乎在所有地方都可以运行,不会使事情比必要的更复杂。
MINI(原始版本)和MINI2(使用Slim路由器)由我(panique)构建,MINI3是原始MINI的一个优秀和改进版本,由JaoNoctus制作。非常感谢,老兄!:)
特性
- 极其简单,易于理解
- 结构简单但清晰
- 创建“美观”的干净URL
- 演示CRUD操作:轻松创建、读取、更新和删除数据库条目
- 演示AJAX调用
- 尝试遵循PSR编码指南
- 使用PDO进行任何数据库请求,附带一个额外的PDO调试工具来模拟您的SQL语句
- 带注释的代码
- 仅使用原生PHP代码,因此人们不需要学习框架
- 使用PSR-4自动加载器
需求(但它是自动安装的)
- PHP 8
- MySQL
- 当然需要基本的Composer知识
- 自动安装:VirtualBox,Vagrant
分支
这个迷你框架有一些很好的升级版本,请在此处查看https://github.com/ribafs/php-router
安装(在Vagrant中,100%自动)
为了使事情保持极其简单,我们在这里使用Vagrant,这是一种简单技术,用于在开发中运行虚拟机。它过时了,但完成了工作,并且比Docker更容易理解。只需安装VirtualBox,Vagrant,然后将此存储库的代码复制到一个文件夹中,进入该文件夹,并输入
vagrant up
这将创建一个具有在Vagrantfile
中给出的配置的虚拟机:它将创建一个具有1024MB RAM的Ubuntu 2022.04 Jammy64虚拟机,将当前文件夹同步到虚拟机内的/var/www/html
,使虚拟机在IP地址192.168.56.77
上可用,并启动bash脚本bootstrap.sh
,它只是一组命令,将安装所有必要的软件。
如果自动安装程序完成,请在浏览器中转到http://192.168.56.77并进行一些点击;)
2016年的旧安装教程
以下是2016年MINI3旧版本的安装教程。
安装(在Vagrant中,100%自动)
如果您使用Vagrant进行开发,则可以一键(或通过命令行命令)安装MINI3 [ Vagrant文档 ]. MINI3附带一个演示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盒子内完成MINI3的完全运行安装。
要这样做,请将_vagrant中的Vagrantfile
和bootstrap.sh
放入一个文件夹中(其他什么也不放)。执行vagrant box add ubuntu/trusty64
将64位Ubuntu 14.04 LTS(“Trusty Thar”)添加到Vagrant(除非您已经拥有它),然后执行vagrant up
来运行盒子。安装完成后,您可以直接在192.168.33.66
上使用完全安装的演示应用程序。由于这只是一个快速演示环境,MySQL根密码和PHPMyAdmin根密码都设置为12345678
,项目安装在/var/www/html/myproject
中。您当然可以在bootstrap.sh
中更改这一点。
Ubuntu 14.04 LTS自动安装(30秒内)
您可以通过下载一个文件并执行它,简单地安装包括Apache、MySQL、PHP和PHPMyAdmin在内的MINI3,mod_rewrite,Composer,所有必要的设置,甚至配置文件中的密码。整个安装将100%自动运行。如果您遇到任何问题,还可以查看有关原始MINI1的此教程,它基本上是相同的安装过程:在Ubuntu 14.04 LTS中30秒内安装MINI
手动安装
- 编辑
application/config/config.php
中的数据库凭据。 - 在
_install/
文件夹中执行.sql语句(例如使用PHPMyAdmin)。 - 确保您已在您的服务器/环境中激活了mod_rewrite。一些指南:[ Ubuntu 14.04 LTS ], [ Ubuntu 12.04 LTS ], [ Windows上的EasyPHP ], [ Windows/Mac OS上的AMPPS ], [ Windows上的XAMPP ], [ Mac OS上的MAMP ]
- 安装composer并在项目文件夹中运行
composer install
以自动创建PSR-4自动加载内容。如果您不知道这意味着什么:记得我们使用“include file.php”在项目中到处包含和使用东西的“好”旧时光吗?PSR-0/4是那个的现代、干净和自动版本。如果您认为这很重要,请谷歌搜索一下。
请随意将您关于Ubuntu 16.04 LTS或其他Linux的指南提交到列表中!
MINI3无需进一步配置即可运行。您还可以将其放在子文件夹中,无需进一步配置即可运行。也许有用:关于如何在Ubuntu 14.04 LTS上安装LAMPP(Linux、Apache、MySQL、PHP、PHPMyAdmin)的简单教程和针对Ubuntu 12.04 LTS的相同教程。
服务器配置
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设置的更深入讨论可以在这里找到。
安全
该脚本使用mod_rewrite,并阻止对/public文件夹之外的所有内容的访问。您的.git文件夹/文件、操作系统临时文件、应用文件夹以及其它内容均不可访问(如果正确设置)。数据库请求使用PDO,因此无需担心SQL注入(除非您使用非常过时的MySQL版本)。
如何包含内容/使用PSR-4
由于本项目使用了正确的PSR-4命名空间,请确保您正确加载/使用内容:而不是使用旧式的代码如include xxx.php
来包含类,您可以在文件顶部简单地做如下操作use Mini\Model\Song;
(现代IDE甚至可以自动完成)。这将自动包含来自Mini/Model文件夹的Song.php文件(区分大小写!)。
但是等等,项目中并没有Mini/Model/Song.php
,而是有application/Model/Song.php
,对吧?为了保持整洁,composer.json设置了一个命名空间(见下面的代码),这基本上是一个名称或别名,用于您的应用中特定的文件夹/区域,在这个例子中,application
文件夹现在可以通过Mini
来访问,当包含内容时。
{
"psr-4":
{
"Mini\\" : "application/"
}
}
这看起来可能有些愚蠢,但以后会很有用。总结一下
要加载application/Model/Song.php
文件,在控制器文件顶部写上use Mini\Model\Song;
。查看SongController以了解整个工作流程!
提示:如安装教程中所述,您在首次设置应用时需要执行“composer install”,这将创建一个文件集(即自动加载器)在/vendor文件夹中。这是Composer处理此类事务的正常方式。如果您删除了vendor文件夹,自动加载将不再工作。如果您更改了composer.json,请务必再次运行composer install/update!
附加功能
MINI3附带了一个小小的自定义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);
许可证
本项目采用MIT许可证。这意味着您可以在私人或商业项目中免费使用和修改它。
快速入门
总体结构
应用的URL路径直接翻译为application/controllers中的控制器(=文件)及其方法。
example.com/home/exampleOne
将执行application/Controller/HomeController.php中的exampleOne()方法。
example.com/home
将执行application/Controller/HomeController.php中的index()方法。
example.com
将执行application/Controller/HomeController.php中的index()方法(默认回退)。
example.com/songs
将执行application/Controller/SongsController.php中的index()方法。
example.com/songs/editsong/17
将执行application/Controller/SongsController.php中的editsong()方法,并将17作为参数传递给它。
不言而喻,对吧?
显示视图
让我们看看home控制器中的exampleOne()-方法(application/Controller/HomeController.php):这仅仅显示了头部、尾部和views/home/example_one.php页面。故意使其尽可能简单和原生。
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控制器中的index()-方法(application/Controller/SongsController.php):类似于exampleOne,但这里我们也请求数据。同样,一切都非常简化且简单:$Song->getAllSongs()简单地调用application/Model/Song.php中的getAllSongs()-方法(当$Song = new Song()时)。
namespace Mini\Controller use Mini\Model\Song; class SongsController { public function index() { // Instance new Model (Song) $Song = new Song(); // getting all songs and amount of songs $songs = $Song->getAllSongs(); $amount_of_songs = $Song->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/ClassName.php。看看getAllSongs()在model.php中的样子:纯PDO,极其简单。
namespace Mini\Model use Mini\Core\Model; class Song extends Model { 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>
贡献
请将提交提交到 develop 分支(包含正在开发版本),而不是 master 分支(包含测试和稳定版本)。
变更日志
2016年8月
- [panique] 修复了奇怪的字母大小写路径问题(也感谢 @snickbit 和 @ugurozturk 的修复!)
- [panique] 将 joanoctus 的优秀 PSR4 版本 MINI 分支为 MINI3
2016年1月
- [joanoctus] 实现 PSR-4 自动加载器
2015年2月
- [jeroenseegers] nginx 配置设置
2014年12月
- [panique] 修复了 CSS 问题
- [panique] 将控制器/视图重命名为单数形式
- [panique] 在 PDO 创建中添加了字符集(提高了安全性)
2014年11月
- [panique] 为 Vagrant 添加了自动安装脚本
- [panique] 基本文档
- [panique] PDO-debugger 现在是一个静态辅助方法,不再是全局函数了
- [panique] 重命名文件夹
- [reg4in] JS AJAX 调用现在即使在子文件夹中使用脚本也能正常运行
- [panique] 移除了所有 "models",现在使用一个模型文件
- [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 的问题(它们冲突)
其他事项
顺便说一句,我还在 Dev Metal 上写博客:)