Ubuntu14.04にSlimFrameworkをインストールして構成する方法
前提条件
このチュートリアルでは、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構成ファイルを変更し、ドキュメントルートの AllowOverrideNoneをAllowOverrideAllに変更します。 サーバーの設定に応じて、この構成ファイルは次のいずれかになります。
/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つのステップで構成されています
- SlimFrameworkのダウンロード
- Zipファイルからの抽出
- 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つのメインディレクトリに分散しています。
このディレクトリにはフレームワークファイルが含まれており、前の手順でコピーされたディレクトリです(/ usr / local / Slim)
このディレクトリには、ルーター、ビュー、モデルなどのプロジェクトファイルが含まれています。 スリムはマイクロフレームワークであるため、特定のプロジェクト構造を強制しません。 これは、適切と思われる方法でプロジェクトファイルを自由に構造化できることを意味します。 これは、開発者が特定のフォルダ構造に慣れている場合に特に役立ちます。
このディレクトリはサーバー上のどこにでも配置できますが、理想的には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
ノート: このフォルダ構造を使用することも、好みに合わせて完全に変更することもできます。
これはWebアクセス可能なフォルダです(通常は次の場所にあります)/var/www
)。 このフォルダーには、Slim関連のファイルが2つだけ含まれています。
- index.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]
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
サンプルスリムアプリケーション