前提条件

このチュートリアルでは、DigitalOceanVPSにSlimFrameworkをインストールして構成するために必要な手順を説明します。 このチュートリアルを終了すると、プロジェクトのベースとなるフォルダー構造を備えた、適切に編成された、動作するSlimFrameworkのインスタンスが完成します。

このチュートリアルは、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構成ファイルを変更し、ドキュメントルートの AllowOverrideNoneAllowOverrideAllに変更します。 サーバーの設定に応じて、この構成ファイルは次のいずれかになります。

  • /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. Apacheを再起動します

service apache2 restart

このチュートリアルは、Linuxの基本に精通していることも前提としています。

スリムフレームワークとは何ですか?

Slimは、市場でPHPで利用できる最も人気のあるオープンソースのマイクロフレームワークの1つです。 それは非常に効率的で、速く、そして使いやすいです。 中小規模のWebアプリケーションの開発には理想的ですが、大規模でスケーラブルなPHPアプリケーションの構築にも非常に効果的に使用できます。

Slimには、フレームワークに期待される最も一般的なユーティリティが満載です。

  • 使いやすく、強力で柔軟なルーター
  • テンプレートをレンダリングするためのカスタムビュー
  • 安全なCookie
  • HTTPキャッシング
  • 使いやすいエラー処理とデバッグ
  • シンプルな構成

インストール

SlimFrameworkのインストールは3つのステップで構成されています

  1. SlimFrameworkのダウンロード
  2. Zipファイルからの抽出
  3. SlimFrameworkを共通の場所にコピーする

1. SlimFrameworkをダウンロードする

次のコマンドを使用して、SlimFrameworkをダウンロードできます。

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. SlimFrameworkを共通の場所にコピーする

次に、codeguy-Slim-3a2ac72/Slimフォルダーを/usr/local/Slimなどの共通の場所にコピーします。この場所から、Slimを使用するこのサーバー上のすべてのプロジェクトにアクセスできます。 これにより、重複が回避され、重複インストールから発生する可能性のあるメンテナンスの問題が防止されます。

次のコマンドを使用してフォルダをコピーしましょう。

cp -r ./codeguy-Slim-3a2ac72/Slim /usr/local/Slim

ノート: 別のバージョンのSlimをダウンロードすると、抽出されたフォルダーの名前(この場合はcodeguy-Slim-3a2ac72)が少し異なる場合があります。 上記のコマンドでフォルダの名前を適宜変更してください

これが完了すると、SlimFrameworkを使用するすべてのプロジェクトがこの場所からそれを参照できるようになります。

重要な注意点: 多くのチュートリアルでは、フレームワークをパブリックフォルダー/ドキュメントルート(/var/www/Slimなど)にインストールします。 パブリックフォルダ/ドキュメントルートの外部にフレームワークファイルをインストールすると(上記のように)、ブラウザでフレームワークファイルにアクセスできないため、アプリケーションの安全性が比較的高くなります。

スリムベースのプロジェクトを整理する

Slimプロジェクトは通常、次の3つのメインディレクトリに分散しています。

1.1。 スリムフレームワークディレクトリ
このディレクトリにはフレームワークファイルが含まれており、前の手順でコピーされたディレクトリです(/ usr / local / Slim)

2.2。 プロジェクトディレクトリ
このディレクトリには、ルーター、ビュー、モデルなどのプロジェクトファイルが含まれています。 スリムはマイクロフレームワークであるため、特定のプロジェクト構造を強制しません。 これは、適切と思われる方法でプロジェクトファイルを自由に構造化できることを意味します。 これは、開発者が特定のフォルダ構造に慣れている場合に特に役立ちます。

このディレクトリはサーバー上のどこにでも配置できますが、理想的にはWebアクセス可能な場所に配置しないでください/usr/localまたはホームフォルダに配置できます。 たとえば、プロジェクトでHelloSlimという名前のフォルダーを作成する場合、プロジェクトは/usr/local/HelloSlimまたは~/HelloSlim、またはその他の任意の場所に配置できます。

このフォルダ内のファイルを配置する方法の1つは次のとおりです。

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.3。 ドキュメントルート/パブリックフォルダ
これはWebアクセス可能なフォルダです(通常は次の場所にあります)/var/www )。 このフォルダーには、Slim関連のファイルが2つだけ含まれています。

  • index.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

ファイルの内容

プロジェクトが上記で定義された構造を持っていると仮定すると、.htaccessファイルとindex.phpファイル(ドキュメントルート内)にそれぞれ次の内容を入力する必要があります。

.htaccess

RewriteEngine On  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteRule ^ index.php [QSA,L]  

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

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';

ノート: ルートを含む他のファイルを含める代わりに、このファイルに直接ルートを作成できます。 ただし、論理的にグループ化されたさまざまなファイルでルートを定義すると、プロジェクトの保守性が向上します。

include.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が上記のようにデプロイされていることを前提としています。

このサンプルアプリケーションの要件を計画してみましょう。

ルート タイプ アクション
/こんにちは GET(静的) 静的ビューを表示します
/ hello / NAME GET(動的) 動的ビューを表示します
/挨拶 役職 POSTリクエスト後にビューを表示します

このプロジェクトでは、アプリケーションフォルダー(/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


サンプルスリムアプリケーション