panique/mini2

dev-master 2022-09-17 18:38 UTC

This package is auto-updated.

Last update: 2024-09-17 22:49:53 UTC


README

MINI2 - A naked barebone PHP application

MINI 2

什么是 MINI 2?

MINI 是一个非常简单的 PHP 基础应用框架,构建在令人惊叹的 Slim 路由器/微框架之上 [1] [2] [docs].

MINI 故意设计得尽可能简单,同时仍能创建强大的应用程序。我利用业余时间,无偿、自愿地构建了 MINI,仅用于个人商业和私人用途,并将其上传到 GitHub,因为可能对其他人也有用。仅此而已。不要仇恨,不要抱怨,不要破坏,不要抨击(在当今这个时代,人们对待这些微小的免费开源私有脚本就像他们支付了大量金钱一样)。如果您不喜欢它,请勿使用它。如果您发现任何问题,请创建一个工单。如果您想做出贡献,请创建一个功能分支,永远不要提交到 master。谢谢 :)

Mini 目前使用 Slim 2.6.0.

还有一个 MINI 1,它是 MINI2 的早期版本,但代码完全不同!自 2016 年 8 月以来,还有一个 MINI 3,它是 MINI 1 的改进版本。虽然 MINI2 在内部使用 Slim,但 MINI 1 和 3 完全使用原生 PHP。

功能

  • 基于 Slim 构建
  • RESTful 路由
  • 极其简单:整个应用程序只有 2 个 .php 文件(加上外部依赖项和视图模板)
  • 使用 Twig 作为模板引擎,其他也是可能的(通过 Slim 包)
  • 使用纯 PDO 而不是 ORM(更容易处理)
  • 基本的 CRUD 功能:创建、读取、更新/编辑和删除内容
  • 基本的搜索
  • 基本的 AJAX 示例
  • (可选)显示模拟 PDO SQL 语句以方便调试
  • (可选)即时编译 SCSS 到 CSS
  • (可选)即时压缩 CSS
  • (可选)即时压缩 JS
  • (可选)开发/测试/生产切换

默认情况下,MINI 允许用户访问 /public 文件夹。应用程序的其余部分(包括 .git 文件、交换文件等)不可访问。

要求

  • PHP 5.3+
  • MySQL
  • mod_rewrite 激活,文档根路由到 /public(下面有教程)

可能有用:在 Ubuntu 14.04 LTS12.04 LTS 上设置 LAMP 栈的简单教程。

许可

MIT,因此您可以自由地使用该项目。

屏幕截图

MINI2 - A naked PHP skeleton application on top of Slim

支持项目

DigitalOcean 租用服务器或仅在 BuyMeACoffee.com 上购买一杯咖啡以支持项目。谢谢! :)

Buy Me A Coffee

安装(在 Vagrant 中,100% 自动化)

如果您在开发中使用 Vagrant,则可以一键安装 MINI(或通过命令行执行一条命令)。MINI 内置了一个演示 Vagrant-file(定义您的 Vagrant 虚拟机),以及一个演示 bootstrap.sh 脚本,该脚本会自动安装 Apache、PHP、MySQL、PHPMyAdmin、git 和 Composer,设置 MySQL 和 PHPMyadmin 中的密码,甚至修改应用代码中的密码,下载 Composer 依赖,激活 mod_rewrite 并编辑 Apache 设置,从 GitHub 下载代码并运行演示 SQL 语句(用于演示数据)。这是 100% 自动化的,您将在 5 分钟内完成 MINI2 在 Ubuntu 14.04 LTS Vagrant 虚拟机中的完整安装。

要这样做,将 Mini/_vagrant 中的 Vagrantfilebootstrap.sh 放入一个文件夹(并且没有其他内容)。执行 vagrant box add ubuntu/trusty64 将 Ubuntu 14.04 LTS(“Trusty Thar”)64 位添加到 Vagrant(除非您已经安装了它),然后执行 vagrant up 来运行虚拟机。安装完成后,您可以直接在 192.168.33.77 上使用完整安装的演示应用程序。由于这只是快速演示环境,MySQL root 密码和 PHPMyAdmin root 密码均设置为 12345678,项目安装于 /var/www/html/myproject

Ubuntu 14.04 LTS 上自动安装(10 秒内完成)

您可以通过下载一个文件并执行它来安装 MINI2 以及 Apache、MySQL、PHP 和 PHPMyAdmin、mod_rewrite、Composer、所有必要的设置,甚至配置文件中的密码,整个安装将 100% 自动运行。有关更多信息,请参阅 bootstrap.sh 文件(包括默认密码)。请记住,这是一个快速的开发环境,绝对不是生产环境的首选。这应该在裸机 Ubuntu 14.04 LTS 上完美运行。

下载安装脚本

wget https://raw.githubusercontent.com/panique/mini2/master/Mini/_vagrant/bootstrap.sh

使其可执行 [这是必需的吗?]

chmod +x bootstrap.sh

运行它!嗖。给它几分钟时间执行所有任务。是的,您可以稍后感谢我:)

sudo ./bootstrap.sh

安装(手动)

1. 激活 mod_rewrite 和 ...

有关 Ubuntu 14.04 LTSUbuntu 12.04 LTS 的教程。

2. ... 将所有请求路由到脚本的 /public 文件夹

将 VirtualHost 文件中的 DocumentRoot /var/www/html 修改为 DocumentRoot /var/www/html/public,并将 <Directory "/var/www/html"> 修改为 <Directory "/var/www/html/public">。别忘了重启。顺便说一句,这也在官方 Slim 文档中提到,但隐藏得很多

3. 修改开发数据库配置

public/index.php 中编辑数据库凭证并填写您的值。

4. 执行 SQL 语句

_install 文件夹中(例如使用 PHPMyAdmin)创建演示数据库。

5. 通过 Composer 获取依赖项

在项目的根目录中执行 composer install 获取依赖项(并创建自动加载器)。

基本用法

查看 /public 中的 index.php。下面的代码将在用户访问 yourproject.com/subpage 时基本显示 /view/subpage.twig。

$app->get('/subpage', function () use ($app) {
    $app->render('subpage.twig');
});

与上面类似,但这次 $model 通过路由传递(use ($app, $model)),因此可以进行模型操作(数据库请求、数据操作等)。调用 getAllSongs() 动作,将结果 $songs(显然是歌曲数组)通过 'songs' => $songs 传递给视图(view/songs.twig)。

$app->get('/songs', function () use ($app, $model) {

    $songs = $model->getAllSongs();

    $app->render('songs.twig', array(
        'songs' => $songs
    ));
});

在视图中,数据可以很容易地像这样渲染(这里使用的是模板引擎Twig)。Twig使视图非常简单和安全。你不需要在HTML-Twig模板中这样做 <?php echo htmlspecialchars($song->id, ENT_QUOTES, 'UTF-8'); ?>,只需简单地这样做 {{ song.id }},它将自动转义并输出 $song["id"]$song->id 等。太棒了!请参阅完整的 Twig 文档

{% for song in songs %}
<tr>
    <td>{{ song.id }}</td>
    <td>{{ song.artist }}</td>
</tr>
{% endfor %}         

模型的内容(目前位于 Mini\model\model.php)非常简单,只是获取数据的一些方法。当模型初始化时,数据库连接会自动创建(肯定只创建一次)。一个典型的模型方法

public function getAllSongs()
{
    $sql = "SELECT id, artist, track, link FROM song";
    $query = $this->db->prepare($sql);
    $query->execute();

    return $query->fetchAll();
}

配置

index.php 包含开发环境的配置。不言而喻。

$app->configureMode('development', function () use ($app) {
    $app->config(array(
        'debug' => true,
        'database' => array(
            'db_host' => 'localhost',
            'db_port' => '',
            'db_name' => 'mini',
            'db_user' => 'root',
            'db_pass' => '12345678'
        )
    ));
});

环境切换(开发/测试/生产)

要实现生产配置,只需复制上面的整个配置块,将 development 替换为 production。在您的Apache配置中添加一个环境变量。更多信息请参阅 这里这里

钩子

Slim可以在应用实例生命周期的特定点上执行某些操作,例如在一切开始之前执行before操作。MINI使用此功能通过外部工具(通过Composer加载)执行SASS到CSS编译和CSS/JS压缩。这在上面的开发环境配置中,以确保这些操作肯定不会在生产环境中执行。

$app->hook('slim.before', function () use ($app) {

    // SASS-to-CSS compiler @see https://github.com/panique/laravel-sass
    SassCompiler::run("scss/", "css/");

    // CSS minifier @see https://github.com/matthiasmullie/minify
    $minifier = new MatthiasMullie\Minify\CSS('css/style.css');
    $minifier->minify('css/style.css');

    // JS minifier @see https://github.com/matthiasmullie/minify
    $minifier = new MatthiasMullie\Minify\JS('js/application.js');
    $minifier->minify('js/application.js');
});

为什么使用 $_POST['x'] 而不是 Slim 的 post/get 处理器?

因为它更简单,更原生。如果您的工作流程更适合使用 Slim 处理器,请随意使用。

为什么删除歌曲不使用 DELETE 请求?

因为(与普遍观点相反)HTML4/5 不支持 GET/POST 之外的 HTTP 方法(但浏览器本身支持)。最简单的解决方案是使用 GET/POST 来执行此操作。如果我在这里完全错了,请写一个票据。

问题

  1. /songs//songs 不一样!
  2. 使用短语法写入初始化(如 $app = new \Slim\Slim(array('view' => ...));)有一些问题,并且最终可能会破坏您的应用程序。使用index.php中的语法运行良好。@see http://help.slimframework.com/discussions/questions/954-twig-getenvironment-function-no-longer-available-using-slim-views

有用:在子文件夹中组织视图模板

当然可以组织视图模板,只需这样做 $app->render('folder1/folder2/index.twig');

有用:多个路由文件

当 index.php 中的所有路由太多时:创建一个名为 routers 的文件夹,将您的路由(r)放入像 xxx.router.php 这样的文件中,并按以下方式加载它们

$routers = glob('../routers/*.router.php');
foreach ($routers as $router) {
    require $router;
}

有用:在视图中获取 URL(1)

Twig 可以获取 URL,在应用程序中使用它

$twig->parserExtensions = array(
    new \Slim\Views\TwigExtension(),
);

然后在视图模板中使用 {{ baseUrl() }}

有用:在视图中获取 URL(2)

或手动添加 baseUrl

$app->hook('slim.before', function () use ($app) {
    $app->view()->appendData(array('baseUrl' => '/base/url/here'));
});

并在视图模板中通过 {{ baseUrl }} 使用它。更多信息请参阅 这里

使用的脚本

SASS 编译器 https://github.com/panique/php-sass

CSS/JS 压缩器 http://www.mullie.eu/dont-build-your-own-minifier/

有趣

http://de.slideshare.net/jeremykendall/keeping-it-small-getting-to-know-the-slim-php-microframework

将内容注入到 $app 中: https://slim.php.ac.cn/news/version-230

精简应用程序 https://github.com/ccoenraets/wine-cellar-php https://github.com/xsanisty/SlimStarter

https://github.com/indieisaconcept/slim-bower-server/blob/master/app/config.php

路由URL重写 / 安装 http://docs.slimframework.com/#Route-URL-Rewriting

变更日志

  • [panique] 从Slim 2.5升级到2.6
  • [panique] 从Slim 2.4.3升级到2.5.0
  • [sim2github] 将模型路径重命名为大写以符合PSR-4

支持项目

Support the project