article)Laravelを使って開発をしている人は数多くいますが、フレームワークの機能にまで手を入れる人はごくわずかでしょう。実際Laravelのドキュメントはほとんどの場面を網羅しています。すべてを網羅している訳ではありません。誤解してほしくないのですが、Laravelのでキュメントは素晴らしいもので必要なことは大抵記載してあります。全てを記載するということは難しいことです。これからその記載されていない知られざる機能について紹介します。なしLaravelのViewはconfigurationファイルと同じように入れ子にする事ができます。Viewsは拡張しやすいテーマシステムを導入するのに非常に便利です。下がディレクトリ構成の例です。した時に、最初にthemes/default/viewsにviewファイルを探しに行き、見つからなければapp/viewsディレクトリを探しに行くようになります。2つのデレクトリを登録するがあります。一部ありCollectionsは配列の操作・管理のための素晴らしいツールです。IteratorAggregate,JsonableInterfaceなど便利なインターフェイスの実装が含まれています。ブログシステムを構築する例で使い方を紹介しましょう。ブログの記事を表すAriticleクラスのインスタンスで構成される配列を操作したい場合は、最初にそれを引数にしてCollectionクラスを作る必要があります。Illuminate\Support\Collection($arrayOfArticles);SortingCollectionsを使うと記事の並び替えが可能です。記事一覧を最近更新された順に並び替えてみましょう。記事一覧がファイルシステムから読み込まれた時に、ArticleクラスのupdateAtに最終更新日が設定される場合、並び替えは以下の様にします。メソッドは並び替えに必要な値を返すcallbackを引数にとり配列の並び替えを実行します。このケースでは単純に記事の最終更新日を返していて、Collectionsはそれを元に降順で並び替えをしています。Filtering配列に対して並び替えだけでなく絞り込みをする事も可能です。MySQLでWHERE句を使うように簡単に出来ます。先程の記事一覧を絞り込んでみましょう。$article->body);});filterメソッドは絞り込みを適用した新しいIlluminate\Support\Collectionのインスタンスを返すので、$resultsにそれを代入する必要があります。rocks!"が含まれる記事のみが含まれる様になります。PaginationCollectionsを使ってページ送りを実装する事も出来ます。1ページに全ての記事を載せる必要はありません。variable.この方法でLaravelのPaginatorインスタンスを生成することも出来ます。全てのページのページ番号とリンクを作ることもが出来るのです。!記事の順番をランダムにするのも簡単です。$articles->random();配列のようにfor句でループさせる事も出来ます。IteratorAggregateとArrayIteratorインターフェイスを実装しているからです。$article->body;}普通の配列やJSONに変換するのも簡単です。$articles->toJson();数あるメソッドの中で最もクールなものの一つがgroupByでしょう。一つのキーを元に配列をグループ化することが出来ます。ブログ記事一覧の例で言えば、記事のプロパティのcategoryでグループ化するには以下のようにします。$articles->groupBy('category');これで全ての記事はカテゴリ毎にグループ化されました。特定のカテゴリの記事一覧を取得するには以下の様にします。}CollectionsはLaravelが提供する知られざる機能の中で最も便利な物の1つです。v4.1.19以降ドキュメント:なしルートのフィルタリングはほとんどのプロジェクトで行う、よくある作業です。ルーティングの際にユーザー認証や年齢制限などをかける事も出来ます。Router::filterでフィルターを作成して、個別にルートティングを設定したり、ルーティングをグループ化して、Router::whenを使ってurlに適用させて使用します。'restricted:admin');上の例では最初にrestrictedを作成して、urladminに適用しています。フィルターには$groupパラメーターを渡すように設定されています。filterにいつも渡されるパラメーターです。urladminにはフィルターを適用したいけど、admin/loginにはフィルターを適用したくない時です。groupを作成して、ログインページだけそこから外す方法があります。一つの方法としてRoute::whenRegexを使い正規表現で適用させる方法です。'restricted:admin');この正規表現はurladminには適用するけど、後ろに/loginが付いているものには適用しないというパターンです。素晴らしい事にこれだけでadmin/login以外の全てのadminページに適用するrestricted:adminフィルターになります。どこかで使っているはずです。MessageBagの最大の役割はLaravelに組み込まれているValidatorを使った時に、そのエラーを保持することです。全てのviewに存在する$errors変数は空のMessageBagインスタンスかRedirect::to('/')->withErrors($validator);でセッションにフラッシュしたインスタンスを保持しています。フォームでの入力エーの時に、正しい入力方法を表示する時などにこれは使えます。}}></div>;@endif上のテンプレートのif句は実は必要ありません。firstメソッドを使い2つ目の引数にdivブロックを渡せば、メッセージを簡単にdivで囲う事が出来ます。一部ありFluentクラスは割りと昔からある機能で、最近ではフレームワークのスキーマビルダーによるマイグレーション処理に使われています。このクラスはLaravel3からLaravel4になっても殆ど変更はありません。唯一の大きな変更といえばインターフェイスがいくつか追加された事でしょう。Fluentクラスを使うのに必要な事はインスタンスを生成して任意にメソッドを呼び出すだけです。Illuminate\Support\Fluent;$user->name('Jason')->country('Australia')->subscriber();これで$userインスタンスには値が"Json"のname属性、値が"Australia"のcountry属性、booleanで"true"の値を持つsubscriber属性が定義されました。Laravel4.2以降はJsonSerializableインターフェイスが追加されたので、json_encodeメソッドに対してダイレクトにこのインスタンスを渡す事が出来ます。Laravel4.0まではインスタンスを通じての属性のsetとgetしか出来ませんでしたが、4.1以降はtoArray、toJsonメソッドが追加され属性の配列での取得や、JSONフォーマットでの取得が可能になりました。あります!5つの便利な機能について、紹介して来ましたが、察しの通りこのフレームワークにはまだまだ機能があります。Laravelがどんな機能を提供しているか知るための一番良い方法は、ソースを解読していくことです。難しい事ではありません、そしてフレームワークについてより深く理解が進むでしょう。