3 tips of laravel

Post on 10-May-2015

3.063 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

3 tips of Laravel2014.07.04 @kurikazu

Laravel Meetup Tokyo vol.4

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

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

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

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

Laravel 4 で CMS 作りました

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

今日の話

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

1.ペジネーション

Laravelのペジネーション

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

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

Controllerとか

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

結果

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

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

Nomura, 12Mori, 33

Takayama, 54Takano, 23Aoki, 61

Nishimura, 47

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

age:

User Search Form

Submit

30 over

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(); ?>

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

1ページ目 OK

<< 1 2 3 4 5 6 7 >>

Tanaka, 31 Honda, 45Mori, 33

User Search Result

2ページ目...

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

Honda, 45Nomura, 12

Mori, 33

User Search Result

条件が引き継がれない

原因

ページ数しか渡されない

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

Honda, 45Nomura, 12

Mori, 33

User Search Result

user/list?page=2

修正

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

appends で条件も渡してやる

結果

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

<< 1 2 3 4 5 6 7 >>

User Search Result

Takayama, 54Aoki, 61

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

2. ガラケー対応

やりたいこと

Laravel

PCスマホ

ガラケー

UTF-8

Shift_JIS

やりたいこと

Laravel

PCスマホ

ガラケー

UTF-8

Shift_JIS ここで変換したい

Before/Afterフィルタを使う

方法

ガラケー → Laravel

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

Filter.php

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

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 で取り出して文字コード変換

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なので設定を上書きする

3. TwitterにPOST

やりたいこと

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

方法

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

設定方法

 "thujohn/twitter": "dev-master"

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

 composer update

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

設定方法

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

...

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

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

php artisan config:publish thujohn/twitter

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

設定方法

<?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

POSTするときは...

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

おまけ. MismatchToken?

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

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

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

Input を見てみた

dd(Input::all());

array(0){}

空っぽでした...

原因

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

を超えていた

ちなみに

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

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

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

Enjoy Laravel !!!

top related