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キャッシング
- 使いやすいエラー処理とデバッグ
- シンプルな構成
インストール
Slim Frameworkのインストールは、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
ノート: 抽出したフォルダの名前(codeguy-Slim-3a2ac72
この場合)別のバージョンのSlimをダウンロードすると、わずかに異なる場合があります。 上記のコマンドでフォルダの名前を適宜変更してください
これが完了すると、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
サンプルスリムアプリケーション
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ドロップレットでドメイン名を使用していない場合は、代わりにドロップレットのIPアドレスを使用してください。
あなたが訪問した場合 http://yourdomain.com/hello
、次のようになります。
あなたが訪問した場合 http://yourdomain.com/hello/World
、次のようになります。
ノート: URLの「World」を別の単語に置き換えると、それに応じてページのコンテンツが変更されます。
POSTルートをテストするには、使用可能なフィールドに名前と挨拶を入力し、[Greet!]をクリックします。 次のようにボタン:
「Greet!」を押した後ボタンをクリックすると、次のようなものが表示されます。
最後の言葉
Slimフレームワークの適切に編成された作業インスタンスがインストールされたので、プロジェクトでの作業を開始する準備が整いました。 Slimについてさらにサポートが必要な場合は、いつでも包括的な公式ドキュメントを参照できます。