Advertisement
  1. Code
  2. PHP
  3. Laravel

Laravelの知られざる5つの機能

Laravel 使Laravel
Scroll to top

Japanese (日本語) translation by Takashi Yamamoto (you can also view the original English article)


Laravel使Laravel

Laravel 

Cascading Views


: v4.0.0 
: 

LaravelViewconfigurationCascading Views便 
1
/app
2
    /views
3
        /blog
4
            /index.blade.php
5
/themes
6
    /default
7
        /views
8
            /blog
9
                /index.blade.php
10
            /theme.blade.php

この構成でreturn View::make('theme::blog.index'); とした時に、最初にthemes/default/viewsにviewファイルを探しに行き、見つからなければapp/viewsディレクトリを探しに行くようになります。

この機能を使用するためにView::addNamespace で2つのデレクトリを登録するがあります。

1
View::addNamespace('theme', [
2
    base_path().'/themes/default/views',
3
    app_path().'/views'
4
]);

Collections


: v4.0.0 
: 

CollectionsCollections ArrayableInterface, IteratorAggregate,JsonableInterface便

使

AriticleCollection
1
$articles = new Illuminate\Support\Collection($arrayOfArticles);

Sorting

Collectionsを使うと記事の並び替えが可能です。例えば記事一覧を最近更新された順に並び替えてみましょう。記事一覧がファイルシステムから読み込まれた時に、ArticleクラスのupdateAtに最終更新日が設定される場合、並び替えは以下の様にします。

1
$articles->sortByDesc(function ($article) { 
2
    return $article->updatedAt; 
3
});

sortBysortByDesc callbackCollections

Filtering


MySQLWHERE使
1
<?php
2
3
$searchQuery = 'Laravel rocks!';
4
5
$results = $articles->filter(function ($article) use ($searchQuery) {
6
    return preg_match(sprintf('/%s/m', $searchQuery), $article->body);
7
});

filterIlluminate\Support\Collection$results"Laravel rocks!"

Pagination


Collections使1
1
$perPage = 1;
2
3
$page = Input::get('page', 1);
4
5
if ($page > ($articles->count() / $perPage)) {
6
    $page = 1;
7
}
8
9
$pageOffset = ($page * $perPage) - $perPage;
10
11
$results = $articles->slice($pageOffset, $perPage);

slice使$results variable. 

LaravelPaginator



1
$article = $articles->random();

配列のようにfor句でループさせる事も出来ます。IteratorAggregateArrayIteratorインターフェイスを実装しているからです。

1
foreach ($articles as $article) {
2
    echo $article->body;
3
}

普通の配列やJSONに変換するのも簡単です。

1
$array = $articles->toArray();
2
$json = $articles->toJson();

groupBy

category
1
$results = $articles->groupBy('category');

これで全ての記事はカテゴリ毎にグループ化されました。 更に特定のカテゴリの記事一覧を取得するには以下の様にします。

1
foreach ($results->get('tutorial') as $article) { 
2
    echo $article->body; 
3
}

CollectionsはLaravelが提供する知られざる機能の中で最も便利な物の1つです。

Regular Expression Filters

利用可能: v4.1.19以降
ドキュメント:なし

ルートのフィルタリングはほとんどのプロジェクトで行う、よくある作業です。ルーティングの際にユーザー認証や年齢制限などをかける事も出来ます。Router::filterでフィルターを作成して、個別にルートティングを設定したり、ルーティングをグループ化して、Router::whenを使ってurlに適用させて使用します。

1
Route::filter('restricted', function($route, $request, $group)
2
{
3
    // Restrict user access based on the value of $group
4
});
5
6
Route::when('admin/*', 'restricted:admin');

restrictedurladmin$group( $route$requestbefore filter )

 urladminadmin/loginroute groupRoute::whenRegex使
1
Route::whenRegex('/^admin(\/(?!login)\S+)?$/', 'restricted:admin');

urladmin/loginadmin/loginadminrestricted:admin/p>

The Message Bag


: v4.0.0 
: 

Illuminate\Support\MessageBag 使MessageBagLaravelValidator使 

view$errorsMessageBagRedirect::to('/')->withErrors($validator);

使
1
{{ Form::text('username', null) }}
2
@if($errors->has('username'))
3
    <div class="error">{{ $errors->first('username') }}></div>;
4
@endif

上のテンプレートのif句は実は必要ありません。firstメソッドを使い2つ目の引数にdivブロックを渡せば、メッセージを簡単にdivで囲う事が出来ます。


1
    {{ Form::text('username', null) }}
2
    {{ $errors->first('username', '<div class="error">:message</div>') }}


Fluent


: v3.0.0
: 

Fluent使 Laravel3Laravel4

Fluent使
1
$user = new Illuminate\Support\Fluent;
2
$user->name('Jason')->country('Australia')->subscriber();

$user"Json"name"Australia"countryboolean"true"subscriber

Laravel4.2JsonSerializablejson_encode

Laravel4.0setget4.1toArraytoJsonJSON


5便

Laravel

便
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.