追記3
別途検証していた際に記事に記載漏れがあったので追記しました。
post のリクエストの箇所で、Requestを利用するためには、bootstrap/app.php
の$app->withFacades();
をコメントインする必要があります。
追記2
getとpostだけでは実用的ではないので、ORMとMigrationを触ってみた記事を書いたので見ていただければと思います。
Laravel製 軽量フレームワーク Lumen ORMとMigrationを触ってみる
追記
@shin1x1 さんから以下の様にコメントを頂いたのでサーバー起動に関して記事を修正しました。
Lumen(Laravel)には、ビルトインサーバを起動するコマンドがあるので、こちらを利用すると良いです。
$ php artisan serve
趣旨
laravelから軽量フレームワークの Lumenと言うのが出たらしいのでとりあえず、get,postとテンプレートエンジンのbladeを試してみるところまでやってみる。
Lumenの概要
phpの軽量フレームワークslimやsilexとかの競合フレームワークとのことらしい。
phpのslimとかを知らない人向けに話すと、rubyでいうところのsinatoraとかpythonのflaskみたいなフレームワークということになる。
Lumenを採用する利点
トップページから
- slimやsilexよりベンチマークで良いスコアが出ている
- プロジェクトの規模が大きくなった際、laravelへの移行が簡単
ドキュメントのイントロダクションから
- Laravelのアプリを切り分けるのに使えるよ
- Laravelと同様の機能(ORM,テンプレートエンジン)が使えるよ
つまり、大きくなるかもしれないけど小さく始めたいプロジェクトや、様々な事情からLaravelを分割したいプロジェクトに利用するフレームワークの選択肢になるよ!ということがドキュメントから読み取れる
必要要件
- PHP >= 5.4
- Mcrypt PHP Extension
- OpenSSL PHP Extension
- Mbstring PHP Extension
- Tokenizer PHP Extension
install
composerを利用してください。
#環境によっては php composer になったりすると思います。適宜読み替えてください。
composer global require "laravel/lumen-installer=~1.0"
Lumenの始め方
lumenコマンドのパスが通っていれば以下のコマンドで。
lumen new service
成功すると以下の様なディレクトリ構成になる
.
├── composer.json
├── composer.lock
├── service
├── app
│ ├── Console
│ ├── Exceptions
│ ├── Http
│ ├── Jobs
│ └── Providers
├── artisan
├── bootstrap
│ └── app.php
├── composer.json
├── composer.lock
├── phpunit.xml
├── public
│ └── index.php
├── readme.md
├── server.php
├── storage
│ ├── app
│ ├── framework
│ └── logs
├── tests
├── ExampleTest.php
└── TestCase.php
とりあえず動かす
slimなどと同様の利用方法はservice/app/Http/routes.php
をいじるとのこと
初期状態では以下の様なコードがroutes.php
に記述されている
<?php
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
$app->get('/', function() use ($app) {
return $app->welcome();
});
とりあえず起動してみる。
修正箇所
service
ディレクトリ以下で下記の様にコマンドを叩くとサーバーが起動します。
php artisan serve
#指摘前はportを8080番で動かしていましたが、serveコマンドは8000番で動きます。
# portを指定するには --portを利用します。
# php artisan serve --port=8080
修正前記事です。
php5.4以上?であれば、ビルトインサーバーが利用できるので、service
ディレクトリ以下のserver.php
を利用して以下のコマンドをたたき、localhost:8080にアクセスする。
php -S 127.0.0.1:8080 server.php
#上記の方法だと、エラーが出た瞬間にログを吐き出す際の設定上の問題で上手くいかないので、appディレクトリの中でいっこ下の階層のserver.phpを叩く形式にしたほうがいいのかもしれない。
# appディレクトリ内で
# php -S 127.0.0.1:8080 ../server.php
すると以下の様な画面になる。
シンプル!
Get Requset
routes.phpに以下を追記
getメソッドの第一引数にulr。この際に{}
でくくったものがパラメータになり、無名関数の引数としてあげることで利用できる。
$app->get('/{name}', function($name) {
return "Hello $name";
});
先ほどと同じようにビルトインサーバーを起動して、http://localhost:8080/hogehoge とアクセスするとHello hogehoge
と帰ってくるのが分かる。
Post Request
routes.phpに以下を追記。
# Requestクラスを使うからと言って、routes.phpに何かをuseする必要はない。
$app->post('/',function() use($app){
$data = Request::all();
return json_encode($data);
});
#追記3
bootstrap/app.php
の20行目の以下をコメントインする必要があります。
$app->withFacades();
追記終了
postの値はRequestのメソッドで取得できる。
とりあえず、postした値が全てjsonの形式で帰ってくるようにしてみた。同様にサーバーを起動し、
curl -F "name=hogehoge" http://127.0.0.1:8080/
この様な形式でコマンドを叩くと,
{"name":"hogehoge"}
と帰ってくる。
Viewを利用する
最初に、app
ディレクトリと同じ階層に、````resourcesディレクトリをつくり、その子ディレクトリとして
views```ディレクトリを作成する。
そのディレクトリがテンプレートを配置する基本的なディレクトリとなる。
ここではindex.phpを以下のように作成してみる。
<h1><?php echo $name;?</h1>
のちに、Get Request で追記した箇所を変更してみる
$app->get('/{name}',function($name) use($app){
- return "Hello $name";
+ return view("index",["name"=>$name]);
});
そして同様にサーバーを起動し、http://localhost:8080/hogehoge にアクセスると、h1タグで囲まれたhtmlがリクエストとして帰ってくる。
テンプレート
laravel製ということもあり、bladeテンプレートエンジンが利用できる。
先ほどのindex.phpを書き換えて名前を変更する
index.php
=> index.blade.php
- <h1><?php echo $name;?</h1>
+ <h1>{{$name}}</h1>
先ほどと同じようにアクセスしてみると同じ結果が帰ってくる。
軽く触ってみて思ったこと
- slimとtwigと~とかで始めるより、lumenの方がひとしきり揃っているので楽なのかもしれない。
- ところどころでlaravelの知識を求められる感がある。
- アイコンがおしゃれだよね。
敷居は低いと思うので、みなさんも触ってみたらいいと思います。