如何在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 包括三个步骤

  1. 下载 Slim 框架
  2. 从 Zip 文件中提取
  3. 将 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

该文件夹还将包含所有项目脚本、样式和图像文件。 为了保持井井有条,您可以将它们分别分为 scriptsstylesimages 文件夹。

这是文档根文件夹的示例结构:

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

文件内容

假设您的项目具有上述定义的结构,您需要分别使用以下内容填充 .htaccessindex.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.phpincludes.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】。

提交者: [[“%3Ca|http]] ://www.php.buzz [[“%3C/a|”>杰]]