tixture55’s diary

主にプログラミング関係の日記です。

laravel5.1を触った感想

laravel5.1の環境構築は済んでいたので、ドキュメントやAdvent Calenderを読んだ感想です。

 

laravel5.1と最新のlaravel5.5だと、細かいところで違っていたり、全然変わってないなと思う所が散見した。まぁそんな変わるわけ無いか。

 

バージョン共通事項

Kernel.phpで読み込むミドルウェアを定義するんですが、確認したところ、$middlewareに突っ込んでるミドルウェアは5.1も5.5も一緒です。下記です。

 

\App\Http\Middleware\EncryptCookies::class,\App\Http\Middleware\EncryptCookies::class, ■Cookie の暗号化/復号化処理を行う機能

\Illuminate\Session\Middleware\StartSession::class, ■Session の生成や取得などを行う機能

\Illuminate\View\Middleware\ShareErrorsFromSession::class, ■Session に保存されたエラー情報を View にセットする機能

\App\Http\Middleware\VerifyCsrfToken::class, ■CSRF を防ぐためのトークンの発行やチェックを行う機能

\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,

 これらは、ファイアウォールでアクセス制限したりする場合、重くなる原因になるだけなので、要らない機能はKernel.phpから削る方がいいみたいです。

 

サービスプロバイダの使い方

サービスプロバイダはサービス毎に初期処理の実装を行うクラスです。例えば、暗号化処理の

初期処理には/vendor/laravel/framework/src/Illuminate/Encryption/EncryptionServiceProvider.phpを使います。

 

5.5と5.1の使い方の差異は未確認。5.1では、config/app.phpに書いてあるサービスプロバイダが必要に応じてロードされる。(遅延ロード)下記の方法で作ることも可能。

$php artisan make:provider RiakServiceProvider

 Eventを使うには、app/Providers/EventServiceProvider.phpに使いたいイベントリスナーを登録していく。EventServiceProviderのメインとなるboot()には、初期処理を書いていく。boot()からはサービスコンテナに登録されている全てのものにアクセスでき、引数にはタイプヒンティングで依存するインタフェースを指定できる。(ここはlaravelの肝(DI使ってるし)というか、laravel使う理由になる大切な機能なので、また改めて記事に書きます。)

ここの仕様は5.1と5.5共通。

 

Bladeの使い方

  5.1も5.5も大体同じです。変わってた所に書いてありますが、markdownとか使えるようになってました。

  • @シンボルでBladeレンダリングエンジンに波括弧の展開をしないように指示することが可能。  例:こんにちは @{{ name }}.
  • {{ isset($name) ? $name : 'Default' }}は、{{ $name or 'Default' }}と書ける。この例の場合、$name変数が存在すれば値が表示されます。しかし存在していなければDefaultという言葉が表示されます。
  • @each('view.name', $jobs, 'job', 'view.empty')でループとビューの読み込みを組み合わせられる。view.nameが読めなければview.emptyが読まれる。第二引数は繰り返し処理の対象となる配列、コレクション

 アプリケーション構造

未確認。下記は5.1のアプリ構造

  • app・・一番いじるところ。MVCのCとルーティング、扱うミドルウェアなどを書く。
  • bootstrap・・services.json(サービスコンテナへの登録を扱う)とかがある。あんま触る機会なさそう。
  • database・・シーダークラスとかを置く。シーダーで一気にレコード作るの気持ちいい。
  • config・・タイムゾーン設定とかドキュメントルートとかsqs,redisとかの設定。queue.phpで指定できるキュードライバはbeanstalkd(別途インストールが必要), sync, sqs(amazon)など。キューは

$ php artisan queue:listen

    で監視状態に入ることができます。

 

ログの機能

違いは未確認。storage/logsに日別ログを作成する。ログへ書き込みにはControllerでログファサードを使う。ログはRFC5424で指定されているemergency, alert, criticalなどをサポートしています。

public function showProfile($id)
{
        Log::info('Showing user profile for user: '.$id);

        return view('user.profile', ['user' => User::findOrFail($id)]);
}

 

変わってた所

laravel5.5ではControllerクラスの継承が必須でなくなっていました。5.1では継承しないとエラーになります。

 

Blade で @if(auth()->check())などとしていたのが、タグ化して @auth, @endauth,@guest, @endguest でできるようになった。

 

vuebootstrap, reactのテンプレートを設定することができるようになったっぽい。

 

開発環境用にデータベースを fresh するコマンドが追加されました。freshをすると、全てのデータベースにあるテーブルを削除してマイグレーションが走ります。

 

Markdownが標準で使えるようになりました。(これは5.4から)

例:

@component('mail::message')
# Order Shipped

Your order has been shipped!

 

Laravel Dusk(ブラウザ経由の自動テスト。seleniumとかを使わずにChromeの機能を使う。これも5.4から)

 

まとめというか愚痴

慣れないとbladeになれるのが結構しんどい。あと、githubでフォークしたリボジトリの中国人の方のコメントが中国語で読めん(笑)