Laravel Meetup vol.4 に行ってきた!
概要
Laravel Meetup vol.4 に行ってきたのでそのレポートです。
数週間前の話なんですが、まとめたのをブログに公開しようと思ってたの忘れてたので公開します。
それと、レポートでわからなかった部分をいろんなスライドとかドキュメントからもってきてまとめてみました。 全体としては、 Laravel のハンズオンに始まり、その魅力 と 実用例って感じの流れでした。
詳細 : http://laravel.doorkeeper.jp/events/12367
ハンズオンしてみよう
ハンズオンのドキュメント
https://github.com/laravel-jp/meetup/blob/ytake-handson/vol-4.md
大体このドキュメント見れば実際に動くところまでが実行できるんですが、大体やったことあったので省略。 インストールから実際にページを表示するくらいの流れです。
Laravel とは
- PHPの最新機能めっちゃつかったモダンなフレームワーク
- テスト駆動開発がしやすく、疎結合になっていて、柔軟性に富む
- 他のフレームワークのいいとこどりしまくってる
- 書いてて楽しい
- 2013年ごろから急激に使える子に(ver4)なって、フレームワークのトレンドも高くなってる
- フルスタックフレームワーク(router, security, ssh view, cache, ORM, request, migration, containerなど)
- シンプルでわかりやすくて(・∀・)イイ!!
- 小規模〜中規模向けらしい(なんでかわからないけど。むしろここの定義がほしい。)
事前知識
Composer とは
- http://www.ryuzee.com/contents/blog/5681
- PHP 5.3 以上で利用可能なライブラリのバージョン管理ツール
- 「アプリケーションによって必要とするバージョンが違う」といった環境の差異をなくし、問題となる箇所を減らすことができる
できること
Migration
IoC Container
- Inversion Of Control (制御の逆転)
- よしなにクラス作ってくれる
- よしなに依存関係解決してくれる
- テストもしやすくなる
- DIコンテナのこと
- クラスを間接的に呼び出すように書くことで呼び出しとクラスの内容に依存性をなくすことができる
- 代わりにアプリケーション実行時に依存性を入れる
<? $app = new Foo;
上記のように普通はかけるが、IoC使うと
<? App::bind('foo' function() { return new Foo; }); $app = App::make('foo');
上記のように間接的にクラスを呼び出す形になる。で、どういうふうにいいかというと、
<? // 普通に書くとDB接続が発生 $orders = new OrderRepository(); new Foo($orders); // IoC 使うと スタブで置き換えられる のでテストしやすい!!! App::bind('Foo' 'MockOrders'); App::make('Foo'); class Foo extends BaseController { public function __construct(OrderRepository $orders) { $this->orders = $orders; } public function getIndex() { $all = $this->orders->all(); return View::make('orders', compact('all')); } }
上記のようにかけるので、テストしやすい。
Router
Router も便利。いろんな書き方が簡単にできるので使いやすいです。
<? // get リクエストで welcome が来たら、 home コントローラーの function index を実行する Route::get('welcome', 'home@index'); // post リクエストで welcome/数字 が来たら、数字を $user_id として使う Route::post('welcome/(:num)', function($user_id) { // do something });
Event
例えば…ユーザがログインしたら、 ログイン時間を save する
<? Event::listen('auth.login', function($user) { $user->last_login = new DateTime; $user->save(); });
Filter
フィルタリングももちろん簡単に。複数もいける。
<? Route::filter('old', function() { if (Input::get('age') < 20) { return Redirect::to('home'); } }); Route::get('user', array('before' => array('auth', 'old'), 'uses' => 'UserController@showProfile'));
Eloquent
http://laravel3.kore1server.com/docs/database/eloquent
ORM (オブジェクトリレーショナルマッパー) 、データベースオブジェクトをやりとりするのに非常に便利なもん。
一般的なORMという感じの印象。
<? class Phone extends Eloquent { public function user() { return $this->belongs_to('User'); } public function comments() { return $this->has_many('Comment'); } } Phone::find(1)->comments()->get(); Phone::find(1)->comments()->order_by('votes', 'desc')->take(10)->get();
View
Blade というテンプレートエンジンをつかってます。
(composer で smarty インストールすることもできます。)
いいところ
継承できちゃう 独自実装も簡単にできる
<? <!-- Stored in app/views/layouts/master.blade.php --> <html> <body> @section('sidebar') This is the master sidebar. @show <div class="container"> @yield('content') </div> </body> </html> @extends('layouts.master') @section('sidebar') @parent <p>This is appended to the master sidebar.</p> @stop @section('content') <p>This is my body content.</p> @stop
JS フレームワーク
- angular.js
- backbone.js
- ember.js
などなど全部いける。
その他
LT
3 Tips of Laravel
ページング
paginate ってのを使えば簡単にいけちゃうんだぜ。
<? DB::table('users')->paginate(10); User::where('age', '>', 40)->paginate(10);
// << 1 2 3 4 5 6 7 >> <?php echo $users->appends(array('age' => $age))->links(); ?>
ガラケー対応
エンコード違うから before 使ってエンコード変える処理入れようね、って話。
<? App::before(function($request) { if(ガラケー) { $content = $response->getContent(); $content = mb_convert_encoding($content, 'SJIS', 'UTF-8'); $response->header('Content-Type', 'text/html;charset=Shift_JIS'); $response->setContent($content); } });
ツイッター投稿
- パッケージを composer で読み込む
- コンフィグ設定
<? Twitter::postTweet(array('status' => $message, 'format' => 'json'));
グーグル oauth
https://github.com/edisonthk/google-oauth-laravel4
既存のであったんですが、実装クソだったので作りなおしてやりましたって話
Laravel Homestead
http://qiita.com/syossan27/items/0104615e5f9ae26f0720
LaravelにはLaravel Homesteadというvagrantを使った開発環境作成のサポートがあります。
これを使ってサクッと開発環境を作りましょう!って話。
話聞いてても資料見ても簡単そう。
Laravel開発カフェ〜Railsアプリ『かんばんりすと』の移植
タスク管理アプリを Rails から Laravel で移植しましたが、結構さくさく移植できました、って話。
参考
スライド系
- http://www.slideshare.net/yuukitakezawa/laravel-osc-hokkaido2014
- http://www.ospn.jp/osc2014-okinawa/pdf/osc2014_okinawa_laravel.pdf
- http://www.slideshare.net/takashiohida/laravel4
- http://www.slideshare.net/kurikazu/3-tips-of-laravel-36641775
- http://www.slideshare.net/KenichiMukai/php-study74