panique / php-mvc-advanced
Requires
- php: >=5.3.0
- matthiasmullie/minify: ~1.3
- panique/pdo-debug: 0.2
- panique/php-sass: ~1.0
- slim/slim: ~2.6
- slim/views: ~0.1
- twig/twig: ~1.16
This package is auto-updated.
Last update: 2022-09-17 18:39:03 UTC
README
MINI 2
什么是 MINI 2 ?
这是一个基于出色的 Slim 路由/微框架 [1] [2] [文档] 的极其简单的 PHP 基础应用程序。
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 LTS 和 12.04 LTS 上设置 LAMP 服务的简单教程。
许可证
MIT,所以你可以自由地用于任何你喜欢的项目。
截图
支持项目
您可以通过在 DigitalOcean 租用服务器或者在 BuyMeACoffee.com 上点一杯咖啡来支持该项目。谢谢! :)
安装(在 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
中的 Vagrantfile
和 bootstrap.sh
放入一个文件夹中(其他什么也不要放)。执行 vagrant box add ubuntu/trusty64
以将 Ubuntu 14.04 LTS("Trusty Thar" 64位)添加到 Vagrant(除非您已经拥有它),然后执行 vagrant up
来运行虚拟机。安装完成后,您可以直接在 192.168.33.77
上使用完全安装的演示应用程序。由于这是一个快速演示环境,MySQL 根密码和 PHPMyAdmin 根密码都设置为 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
运行它!Boooooom。给它几分钟来完成所有任务。是的,您可以稍后再感谢我 :)
sudo ./bootstrap.sh
安装(手动)
1. 启用 mod_rewrite 和 ...
有关 Ubuntu 14.04 LTS 和 Ubuntu 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。下面的代码将在用户访问你的项目.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 可以在应用实例的生命周期中的某些点上执行某些操作,例如 在一切开始之前。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 来做。如果我完全错了,请提交一个工单。
故障
/songs/
与/songs
不同!- 使用短语法
$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
Slim应用程序 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