panique/mini3

此包最新版本(dev-develop)没有可用的许可证信息。

维护者

详细信息

github.com/panique/mini3

源代码

问题

安装: 119

依赖: 0

建议者: 0

安全: 0

星标: 274

关注者: 35

分支: 100

开放问题: 19

dev-develop 2024-02-20 20:58 UTC

This package is auto-updated.

Last update: 2024-09-20 22:09:03 UTC


README

MINI3 - A naked barebone PHP application

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中的Vagrantfilebootstrap.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

手动安装

  1. 编辑application/config/config.php中的数据库凭据。
  2. _install/文件夹中执行.sql语句(例如使用PHPMyAdmin)。
  3. 确保您已在您的服务器/环境中激活了mod_rewrite。一些指南:[ Ubuntu 14.04 LTS ], [ Ubuntu 12.04 LTS ], [ Windows上的EasyPHP ], [ Windows/Mac OS上的AMPPS ], [ Windows上的XAMPP ], [ Mac OS上的MAMP ]
  4. 安装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 上写博客:)

支持项目

Buy Me A Coffee