如何在Ubuntu14.04上安装和配置Slim框架
先决条件
本教程将说明在 Digital Ocean VPS 上安装和配置 Slim Framework 所需的步骤。 在本教程结束时,您将拥有一个组织良好、工作良好的 Slim 框架实例,并具有一个文件夹结构,您可以在其中建立您的项目。
本教程假设您在 Ubuntu 上安装了 LAMP(或您喜欢的)堆栈。 如果你不这样做,你可以参考这篇文章,帮助你 在 Ubuntu 上安装 LAMP 堆栈。
如果您的应用程序不使用 MySQL,您可以跳过它的安装。 您需要安装的最低限度是 Apache Web 服务器(with Mod_Rewrite)和 PHP(最低 5.3 版本)。
先决条件的快速设置
1. 安装 Apache
apt-get update apt-get install apache2
2. 安装 PHP
apt-get install php5 libapache2-mod-php5 php5-mcrypt
3. 启用 mod_rewrite
a2enmod rewrite
4. 修改Apache配置文件
修改 Apache 配置文件,将文档根目录的 AllowOverride None 更改为 AllowOverride All。 根据您的服务器设置,此配置文件可以是以下任何一种:
/etc/apache2/apache2.conf
/etc/apache2/sites-enabled/000-default
/etc/apache2/sites-available/default
在配置文件中,找到如下所示的部分:
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
将其更改为以下内容并保存文件:
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>
5. 重启阿帕奇
service apache2 restart
本教程还假设您熟悉 Linux 基础知识。
什么是 Slim 框架?
Slim 是市场上最流行的 PHP 开源微框架之一。 它非常高效、快速且易于使用。 虽然它非常适合开发中小型 Web 应用程序,但它也可以非常有效地用于构建大型可扩展 PHP 应用程序。
Slim 包含您在框架中所期望的最常见的实用程序:
- 易于使用、功能强大且灵活的路由器
- 用于呈现模板的自定义视图
- 安全 cookie
- HTTP缓存
- 易于使用的错误处理和调试
- 简单配置
安装
安装 Slim Framework 包括三个步骤
- 下载 Slim 框架
- 从 Zip 文件中提取
- 将 Slim 框架复制到公共位置
1. 下载 Slim 框架
您可以使用以下命令下载 Slim 框架:
wget https://github.com/codeguy/Slim/zipball/master
这会将框架作为 zip
文件获取,并将其存储在当前目录中,名称为 master
。
2. 从 Zip 文件中提取
可以使用以下命令提取 zip 文件的内容:
unzip master -d ./
笔记: 如果遇到 unzip 未安装的错误,您可以使用命令 apt-get install unzip
安装它,然后执行上述命令将所有文件解压缩。
上面的命令会将文件解压到一个名为 codeguy-Slim-3a2ac72
的文件夹中。 此文件夹包含一个名为 Slim 的文件夹,它是框架文件夹。
3. 将 Slim 框架复制到公共位置
现在,我们将 codeguy-Slim-3a2ac72/Slim
文件夹复制到一个公共位置,例如 /usr/local/Slim
,从该位置该服务器上使用 Slim 的所有项目都可以访问它。 这将避免重复并防止重复安装可能引起的任何维护问题。
让我们使用以下命令复制文件夹:
cp -r ./codeguy-Slim-3a2ac72/Slim /usr/local/Slim
笔记: 如果您下载不同版本的 Slim,解压文件夹的名称(在本例中为 codeguy-Slim-3a2ac72
)可能会略有不同。 确保相应地修改上述命令中的文件夹名称
完成此操作后,您的任何使用 Slim 框架的项目都可以从该位置引用它。
重要的提示: 许多教程在公共文件夹/文档根目录中安装框架(如 /var/www/Slim
)。 在公共文件夹/文档根目录之外安装框架文件(如上所述)使应用程序相对更安全,因为框架文件无法在浏览器中访问。
组织基于 Slim 的项目
Slim 项目通常分布在三个主要目录中:
1. Slim 框架目录
该目录包含框架文件,是上一步复制的目录(/usr/local/Slim)
2. 项目目录
此目录包含您的项目文件,如路由器、视图、模型等。 作为一个微框架,Slim 不强制执行任何特定的项目结构。 这意味着您可以自由地以您认为合适的任何方式构建项目文件。 这在开发人员习惯于特定文件夹结构的情况下特别有用。
此目录可以驻留在服务器上的任何位置,但理想情况下,它 不应 位于 Web 可访问的位置。 您可以将它放在 /usr/local
或您的主文件夹中。 例如,如果您在项目中创建名为 HelloSlim
的文件夹,它可能位于 /usr/local/HelloSlim
或 ~/HelloSlim
或您喜欢的任何其他位置。
这是如何排列此文件夹中的文件的一种方式:
HelloSlim |- Routes | |- route1.php | |- route2.php |- Models | |- model1.php | |- model2.php |- Views | |- footer.php | |- header.php | |- sidebar.php | |- view1.php | |- view2.php |- Class | |- class1.php | |- class2.php |- routes.php //contains 'include' statements for all routes in the 'Routes' folder |- includes.php //contains 'include' statements for all models/classes in the 'Models/Class' folders
您可以通过执行以下命令来创建此文件夹结构:
mkdir /usr/local/HelloSlim mkdir /usr/local/HelloSlim/Routes mkdir /usr/local/HelloSlim/Models mkdir /usr/local/HelloSlim/Views mkdir /usr/local/HelloSlim/Class
笔记: 您可以使用此文件夹结构或完全更改它以适合您的偏好。
3. 文档根目录/公共文件夹
这是 Web 可访问文件夹(通常位于/var/www
)。 此文件夹仅包含两个 Slim 相关文件:
- 索引.php
- .htaccess
该文件夹还将包含所有项目脚本、样式和图像文件。 为了保持井井有条,您可以将它们分别分为 scripts
、styles
和 images
文件夹。
这是文档根文件夹的示例结构:
Document Root (eg. /var/www/) |- scripts | |- jquery.min.js | |- custom.js |- styles | |- style.css | |- bootstrap.min.css |- images | |- logo.png | |- banner.jpg |- .htaccess |- index.php
文件内容
假设您的项目具有上述定义的结构,您需要分别使用以下内容填充 .htaccess
和 index.php
文件(在文档根目录中):
.htaccess
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L]
索引.php
<?php require '/usr/local/Slim/Slim.php'; //include the framework in the project \Slim\Slim::registerAutoloader(); //register the autoloader $projectDir = '/usr/local/HelloSlim'; //define the directory containing the project files require "$projectDir/includes.php"; //include the file which contains all the project related includes $app = new \Slim\Slim(array( 'templates.path' => '/usr/local/HelloSlim/Views' )); //instantiate a new Framework Object and define the path to the folder that holds the views for this project require "$projectDir/routes.php"; //include the file which contains all the routes/route inclusions $app->run(); //load the application
要完成本教程,假设项目已按照上一节中定义的文件夹结构进行排列,routes.php
和 includes.php
文件(在项目目录中)应具有以下内容:
路由.php
<?php require '/usr/local/HelloSlim/Routes/route1.php'; require '/usr/local/HelloSlim/Routes/route2.php';
笔记: 您可以直接在此文件中创建路由,而不是包含其他包含路由的文件。 但是,在不同的、逻辑分组的文件中定义路由将使您的项目更易于维护
包括.php
<?php require "/usr/local/HelloSlim/Class/class1.php"; require "/usr/local/HelloSlim/Class/class2.php"; require "/usr/local/HelloSlim/Models/model1.php"; require "/usr/local/HelloSlim/Models/model2.php";
超薄应用示例
现在您已经知道如何设置 Slim 应用程序,让我们创建一个简单的应用程序,它执行以下操作:
- 处理静态路由(GET & POST)
- 处理动态路由
- 使用视图
笔记: 此示例应用程序将假定 Slim 已按上述方式部署。
让我们绘制出此示例应用程序的要求:
路线 | 类型 | 行动 |
---|---|---|
/你好 | 获取(静态) | 显示静态视图 |
/你好/名字 | 获取(动态) | 显示动态视图 |
/迎接 | 邮政 | 在 POST 请求后显示视图 |
该项目需要在 Application 文件夹 (/usr/local/HelloSlim/
) 中创建以下文件:
HelloSlim |- Routes | |- getRoutes.php | |- postRoutes.php |- Views | |- footer.php | |- header.php | |- hello.php | |- greet.php |- routes.php
公共文件夹/文档根目录如下所示:
这是文档根文件夹的示例结构:
Document Root (eg. /var/www/) |- .htaccess |- index.php
现在按如下方式填充这些文件:
1. /var/www/.htaccess
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [QSA,L]
2. /var/www/index.php
<?php require '/usr/local/Slim/Slim.php'; //include the framework in the project \Slim\Slim::registerAutoloader(); //register the autoloader $projectDir = '/usr/local/HelloSlim'; //define the directory containing the project files $app = new \Slim\Slim(array( 'templates.path' => '/usr/local/HelloSlim/Views' )); //instantiate a new Framework Object and define the path to the folder that holds the views for this project require "$projectDir/routes.php"; //include the file which contains all the routes/route inclusions $app->run(); //load the application
3. /usr/local/HelloSlim/Routes/getRoutes.php
<?php $app->get('/', function(){ echo 'This is a simple starting page'; }); //The following handles any request to the /hello route $app->get('/hello', function() use ($app){ // the following statement invokes and displays the hello.php View $app->render('hello.php'); }); //The following handles any dynamic requests to the /hello/NAME routes (like /hello/world) $app->get('/hello/:name', function($name) use ($app){ // the following statement invokes and displays the hello.php View. It also passes the $name variable in an array so that the view can use it. $app->render('hello.php', array('name' => $name)); });
4. /usr/local/HelloSlim/Routes/postRoutes.php
<?php //The following handles the POST requests sent to the /greet route $app->post('/greet', function() use ($app){ //The following statement checks if 'name' has been POSTed. If it has, it assigns the value to the $name variable. If it hasn't been set, it assigns a blank string. $name = (null !== $app->request->post('name'))?$app->request->post('name'):''; //The following statement checks if 'greeting' has been POSTed. If it has, it assigns the value to the $greeting variable. If it hasn't been set, it assigns a blank string. $greeting = (null !== $app->request->post('greeting'))?$app->request->post('greeting'):''; // the following statement invokes and displays the 'greet.php' View. It also passes the $name & $greeting variables in an array so that the view can use them. $app->render('greet.php', array( 'name' => $name, 'greeting' => $greeting )); });
5. /usr/local/HelloSlim/Views/footer.php
<small>Copyright notice...</small> </body> </html>
6. /usr/local/HelloSlim/Views/header.php
超薄应用示例
7. /usr/local/HelloSlim/Views/hello.php
*** <?php include('header.php'); ?> *** <h1>Hello <?php echo isset($name)?$name:''; ?></h1> <!-- The above line handles both the dynamic and the static GET routes that we implemented in the getRoutes.php file. *** <h2>Send a greeting</h2> <form method='POST' action='/greet'> <label>Name</label><br> <input name='name' placeholder='Who do you want to greet?'><br> <label>Greeting</label><br> <input name='greeting' placeholder='Your greeting message'><br> <input type='submit' value='Greet!'> </form> *** <?php include('footer.php'); ?>
8. /usr/local/HelloSlim/Views/greet.php
<?php include('header.php'); echo "<p>$greeting, $name</p><p><a href='/hello'>First Page</a></p>"; include('footer.php');
9. /usr/local/HelloSlim/routes.php
<?php include 'Routes/getRoutes.php'; include 'Routes/postRoutes.php';
示例应用程序屏幕截图
如果您在 http://yourdomain.com/
访问新创建的示例应用程序,您将看到如下内容:
笔记: 如果您的 Digital Ocean droplet 没有使用域名,请改用 droplet 的 IP 地址。
如果您访问 http://yourdomain.com/hello
,您将获得以下信息:
如果您访问 http://yourdomain.com/hello/World
,您将获得以下信息:
笔记: 如果您将 URL 中的“世界”替换为另一个词,则页面内容将相应更改。
要测试 POST 路由,请在可用字段中输入名称和问候语,然后点击“问候!” 按钮如下:
在击中“问候!”之后按钮,您应该得到如下内容:
最后一句话
现在您已经安装了一个组织良好的 Slim 框架工作实例,您可以开始处理您的项目了。 如果需要 Slim 的额外帮助,可以随时参考【X67X】综合官方文档【X107X】。