3 tips of laravel

40
3 tips of Laravel 2014.07.04 @kurikazu Laravel Meetup Tokyo vol.4 http://am4.jp/?p=124

Upload: kazuaki-kuriu

Post on 10-May-2015

3.063 views

Category:

Technology


3 download

DESCRIPTION

Laravel Meetup Tokyo vol.4 での発表資料です。

TRANSCRIPT

Page 1: 3 tips of Laravel

3 tips of Laravel2014.07.04 @kurikazu

Laravel Meetup Tokyo vol.4

http://am4.jp/?p=124

Page 2: 3 tips of Laravel

KazuakiKURIU• twitter: @kurikazu• 所属: ディップ株式会社• 求人広告サービスのWebサイト、スマートフォンアプリの開発マネジメントを担当

• 普段は「進捗どうですか」と聞く方

• Laravel歴は1年くらい• 認定スクラムマスター(2011年6月受講)

Page 3: 3 tips of Laravel

Laravel 4 で CMS 作りました

Page 4: 3 tips of Laravel

作った機能• 管理系• 記事登録(文字、画像) / 編集 / 削除• 限定記事を見られる会員の管理• 会員にメール一斉送信• 閲覧系• 一般記事 / 限定公開記事 の出し分け• ガラケー対応

Page 5: 3 tips of Laravel

今日の話

•CMSを作ってみて得られたLaravelのTipsをお裾分け

Page 6: 3 tips of Laravel

1.ペジネーション

Page 7: 3 tips of Laravel

Laravelのペジネーション

$users=DB::table('users')->paginate(10);

$users=User::where('age','>',40)->paginate(10);

Controllerとか

Page 8: 3 tips of Laravel

Laravelのペジネーション

$users=DB::table('users')->paginate(10);

<div class="container"> <?php foreach ($users as $user): ?> <?php echo $user->name; ?>, <?php echo $user->age; ?> <?php endforeach; ?> </div> <?php echo $users->links(); ?> ←ペジネーション表示

$users=User::where('age','>',40)->paginate(10);

Controller

View

Page 9: 3 tips of Laravel

結果

<< 1 2 3 4 5 6 7 8 ... 20 21 >>

Yamada, 20Tanaka, 31Suzuki, 21Honda, 45

Nomura, 12Mori, 33

Takayama, 54Takano, 23Aoki, 61

Nishimura, 47

Page 10: 3 tips of Laravel

検索フォームでやってみる

age:

User Search Form

Submit

30 over

Page 11: 3 tips of Laravel

if (Input::has('age')){ $age = Input::get('age'); $users = User::where('age','>',$age)->paginate(3); } else { $users = User::all()->paginate(3); }

<div class="container"> <?php foreach ($users as $user): ?> <?php echo $user->name; ?> <?php endforeach; ?> </div> <?php echo $users->links(); ?>

検索フォームでやってみる

Page 12: 3 tips of Laravel

1ページ目 OK

<< 1 2 3 4 5 6 7 >>

Tanaka, 31 Honda, 45Mori, 33

User Search Result

Page 13: 3 tips of Laravel

2ページ目...

<< 1 2 3 4 5 6 7 8 ... 20 21 >>

Honda, 45Nomura, 12

Mori, 33

User Search Result

条件が引き継がれない

Page 14: 3 tips of Laravel

原因

ページ数しか渡されない

<< 1 2 3 4 5 6 7 8 ... 20 21 >>

Honda, 45Nomura, 12

Mori, 33

User Search Result

user/list?page=2

Page 15: 3 tips of Laravel

修正

<div class="container"> <?php foreach ($users as $user): ?> <?php echo $user->name; ?> <?php endforeach; ?> </div> <?php echo $users->appends(array('age' => $age))->links(); ?>

appends で条件も渡してやる

Page 16: 3 tips of Laravel

結果

検索条件を保持して遷移できる

<< 1 2 3 4 5 6 7 >>

User Search Result

Takayama, 54Aoki, 61

Nishimura, 47 user/list?age=30&page=2

Page 17: 3 tips of Laravel

2. ガラケー対応

Page 18: 3 tips of Laravel

やりたいこと

Laravel

PCスマホ

ガラケー

UTF-8

Shift_JIS

Page 19: 3 tips of Laravel

やりたいこと

Laravel

PCスマホ

ガラケー

UTF-8

Shift_JIS ここで変換したい

Page 20: 3 tips of Laravel

Before/Afterフィルタを使う

方法

Page 21: 3 tips of Laravel

ガラケー → Laravel

App::before(function($request) { if (ガラケーだったら) { // リクエストをUTF8に変換 $converted = 文字コード変換(Input::get());  Input::merge($converted);  } });

Filter.php

UAは Request::server('HTTP_USER_AGENT') で取れる

Page 22: 3 tips of Laravel

Laravel → ガラケー

App::after(function($request, $response) { if (ガラケーだったら) { // 出力文字列を ShiftJIS に変換 $content = $response->getContent();   $content = mb_convert_encoding($content, 'SJIS', 'UTF-8');   $response->header('Content-Type', 'text/html; charset=Shift_JIS');   $response->setContent($content); } });

Filter.php

getContent で取り出して文字コード変換

Page 23: 3 tips of Laravel

Laravel → ガラケー

App::after(function($request, $response) { if (ガラケーだったら) { // 出力文字列を ShiftJIS に変換 $content = $response->getContent();   $content = mb_convert_encoding($content, 'SJIS', 'UTF-8');   $response->header('Content-Type', 'text/html; charset=Shift_JIS');   $response->setContent($content); } });

Filter.php

デフォルトUTF8なので設定を上書きする

Page 24: 3 tips of Laravel

3. TwitterにPOST

Page 25: 3 tips of Laravel

やりたいこと

記事を更新した時にTwitterにPOST

Page 26: 3 tips of Laravel

方法

thuohn/twitter-l4 パッケージhttps://github.com/thujohn/twitter-l4

Page 27: 3 tips of Laravel

設定方法

 "thujohn/twitter": "dev-master"

composer.jsonに下記の記載を追加

 composer update

下記のコマンドを実行する

Page 28: 3 tips of Laravel

設定方法

'providers' => array(  'Thujohn\Twitter\TwitterServiceProvider', )

...

'aliases' => array( 'Twitter' => 'Thujohn\Twitter\TwitterFacade', )

app/config/app.phpに下記の記載を追加

php artisan config:publish thujohn/twitter

twitterパッケージの初期化を行う

Page 29: 3 tips of Laravel

設定方法

<?php

// You can find the keys here : https://dev.twitter.com/

return array(    'API_URL'             => 'api.twitter.com',    'API_VERSION'         => '1.1',    'USE_SSL'             => true,

    'CONSUMER_KEY'        => 'xxxxxxxxxxxxxxxxxxx',    'CONSUMER_SECRET'     => 'yyyyyyyyyyyyyyyyyyy',    'ACCESS_TOKEN'        => 'zzzzzzzzzzzzzzzzzzz',    'ACCESS_TOKEN_SECRET' => 'vvvvvvvvvvvvvvvvvvv', );

app/config/packages/thujohn/twitter/config.php

Page 30: 3 tips of Laravel

POSTするときは...

 Twitter::postTweet(array('status' => $message,'format' => 'json'));

Page 31: 3 tips of Laravel

おまけ. MismatchToken?

Page 32: 3 tips of Laravel

記事をPOSTする時にエラーが出た

Route::filter('csrf', function() {  if (Session::token() != Input::get('_token'))  {   throw new Illuminate\Session\TokenMismatchException;  } });

CSRFフィルタでトークンが一致しないエラー

Page 33: 3 tips of Laravel

Input を見てみた

dd(Input::all());

Page 34: 3 tips of Laravel

array(0){}

空っぽでした...

Page 35: 3 tips of Laravel

原因

アップロードしようとしてた画像ファイルの容量がupload_max_filesize

を超えていた

Page 36: 3 tips of Laravel

ちなみに

Page 37: 3 tips of Laravel

各環境へのデプロイはCapistrano で簡素化

Page 38: 3 tips of Laravel

簡単デプロイでたのしく開発しよう

Page 39: 3 tips of Laravel

詳しくは以下でhttp://qiita.com/kurikazu/items/e63bc30806aeb3214f93

Page 40: 3 tips of Laravel

Enjoy Laravel !!!