リリースノート
- サポートポリシー
- Laravel 5.3
- Laravel 5.2
- Laravel 5.1.11
- Laravel 5.1.4
- Laravel 5.1
- Laravel 5.0
- Laravel 4.2
- Laravel 4.1
サポートポリシー
Laravel5.1のようなLTSリリースでは、バグフィックスは2年間、セキュリティフィックスは3年間提供します。これらのリリースは長期間に渡るサポートとメンテナンスを提供します。 一般的なリリースでは、バグフィックスは6ヶ月、セキュリティフィックスは1年です。
Laravel 5.3
Laravel5.2で施された改善に引き続き、5.3では以降の新機能/改善が行われました。ドライバベースの通知システム、Laravel
Echoによる堅牢なリアルタイムのサポート、Laravel
Passportによる苦労知らずのOAuth2サーバ、Laravel
Scoutによるフルテキストモデル検索、Laravel
ElixirによるWebpackのサポート、"Mailable"オブジェクトの導入、web
とapi
ルートの明確な分離、クロージャベースコンソールコマンド、アップロードファイル保存の便利なヘルパ、POPOでシングルアクションのコントローラのサポート、デフォルトフロントエンドスカフォールドの改善などです。
通知
Laracastsでこの機能の無料ビデオチュートリアルがご覧いただけます。
Laravelの通知は、メール、Slack、SMSなどの様々な配信チャンネル庭たり、通知を送信するためのシンプルで記述的なAPIを提供します。たとえば、課金された通知を定義し、メールとSMSにより、その通知を配信できます。簡単なメソッド一つで、通知が送信できます。
$user->notify(new InvoicePaid($invoice));
既にコミュニティにより書かれた通知ドライバが、数多く、幅広く用意されています。その中には、iOSやAndroid通知のサポートも含まれています。通知についての詳細を学ぶには、通知のドキュメントをお読みください。
WebSocket/イベントブロードキャスト
Laravelの以前のバージョンにも、イベントブロードキャストはありました。Laravel5.3では、プライベート配信のためのチャンネルレベルの認証と、WebSocketプレゼンスチャンネルが追加され、これによりフレームワークのこの機能は大幅に向上しました。
/*
* チャンネルサブスクリプションの認証
*/
Broadcast::channel('orders.*', function ($user, $orderId) {
return $user->placedOrder($orderId);
});
NPMによりインストールできる新しいJavaScriptパッケージであるLaravel Echoは、クライアントサイドのJavaScriptアプリケーションの中でチャンネルを購読し、サーバサイドイベントをリッスンするための、簡単で美しいAPIを提供するためにリリースされました。EchoはPusherとSocket.ioもサポートしています。
Echo.channel('orders.' + orderId)
.listen('ShippingStatusUpdated', (e) => {
console.log(e.description);
});
伝統的なチャンネルを行動くすることに付け加え、Laravel Echoは指定したチャンネルへ誰がリッスンしているかの情報を提供する、プレゼンスチャンネルの購入も簡単にできます。
Echo.join('chat.' + roomId)
.here((users) => {
//
})
.joining((user) => {
console.log(user.name);
})
.leaving((user) => {
console.log(user.name);
});
Echoとイベントブロードキャストの詳細は、ドキュメントで確認してください。
Laravel Passport(OAuth2サーバ)
Laracastsでこの機能の無料ビデオチュートリアルがご覧いただけます。
Laravelアプリケーションのためにすぐに用意できる、完全なOAuth2サーバの実装であるLaravel Passportを使うことにより、Laravel5.3でのAPI認証はとても簡単です。Passportは、Alex Bilbie氏によりメンテナンスされている、League OAuth2 server上に構築されています。
PassportはOAuth2認証コードによるアクセストークンの発行を苦労なしにしてくれます。皆さんのユーザに対し「パーソナルアクセストークン」をWeb UIから作成することもできます。素早く開始できるように、クライアント作成、アクセストークンの発行などをユーザに行ってもらう、OAuth2ダッシュボードの出発地点として役立てることができる、VueコンポーネントもPassportは用意しています。
<passport-clients></passport-clients>
<passport-authorized-clients></passport-authorized-clients>
<passport-personal-access-tokens></passport-personal-access-tokens>
Vueコンポーネントを使用したくない場合は、クライアントとアクセストークンを管理するフロントエンドダッシュボードを作成することもできます。PassportはシンプルなJSON APIを提供していますので、どんなJavaScriptフレームワークを選んでも使用できます。
もちろん、アプリケーションのAPI利用者がリクエストするアクセストークンスコープの定義も、Passportでは簡単です。
Passport::tokensCan([
'place-orders' => 'Place new orders',
'check-status' => 'Check order status',
]);
さらに、Passportは認証済みのアクセストークンが必要なトークンスコープを含んでいるかを確認するための、便利なミドルウェアも用意しています。
Route::get('/orders/{order}/status', function (Order $order) {
// アクセストークンは、"check-status"スコープを持っている
})->middleware('scope:check-status');
最後に、Passportではアクセストークンを渡す手間を取らなくても、JavaScriptアプリケーションから皆さん自身のAPIを使ってもらうサポートもしています。Passportは皆さんがアプリケーションの重要点に集中できるように、暗号化済みJWTクッキーと同期済みCSRFトークンを用い、これを実現しています。Passportの詳細は、ドキュメントで確認してください。
検索(Laravel Scout)
Laravel ScoutはEloquentモデルへフルテキスト検索機能を追加するための、シンプルなドライバベースのソルーションを提供します。モデルオブザーバを使い、Scoutは自動的にサーチインデックスとEloquentレコードの同期を保ちます。現在、ScoutはAlgoliaドライバを用意していますが、シンプルなカスタムドライバをプログラムし、自由に独自の検索実装でScoutを拡張できます。
モデルを検索可能にするには、モデルにSearchable
トレイトをただ追加するだけです。
<?php
namespace App;
use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use Searchable;
}
トレイトをモデルへ追加したら、その情報はモデルを保存するごとに、検索インデックスと同期されます。
$order = new Order;
// ...
$order->save();
モデルがインデックスされると、全モデルに対するフルテキスト検索の実行は簡単です。検索結果をページ付けもできます。
return Order::search('Star Trek')->get();
return Order::search('Star Trek')->where('user_id', 1)->paginate();
もちろん、Scoutはもっと機能を持っており、ドキュメントで説明しています。
Mailableオブジェクト
Laracastsでこの機能の無料ビデオチュートリアルがご覧いただけます。
Laravel5.3はMailableオブジェクトをサポートしています。このオブジェクトは、クロージャーの中でメールメッセージをカスタマイズする代わりに、シンプルなオブジェクトとしてメールメッセージを表現できるようにしてくれます。例として、"Welcome"メールのために、シンプルなMailableオブジェクトを定義してみましょう。
class WelcomeMessage extends Mailable
{
use Queueable, SerializesModels;
/**
* メッセージの構築
*
* @return $this
*/
public function build()
{
return $this->view('emails.welcome');
}
}
Mailableオブジェクトを定義できたら、シンプルで記述的なAPIを使用し、ユーザへ送ることができます。Mailableオブジェクトはコードを読み解く時に、メッセージの意図を見つけやすくしてくれます。
Mail::to($user)->send(new WelcomeMessage);
もちろん、Mailableオブジェクトをキューワーカによりバックグランドで送信できるように、「キュー投入可能」としてマーク付けできます。
class WelcomeMessage extends Mailable implements ShouldQueue
{
//
}
Mailableオブジェクトの情報は、メールのドキュメントで確認してください。
アップロードファイルの保存
Laracastsでこの機能の無料ビデオチュートリアルがご覧いただけます。
Webアプリケーションにおいてファイル保存の最も一般的なユースケースは、プロファイルや写真、ドキュメントなど、ユーザがアップロードしたファイルを保存する場合です。Laravel5.3では、アップロードファイルインスタンスに対しstore
メソッドを使用すれば、アップロード済みファイルを簡単に保存できます。アップロードファイルを保存したいパスを引数に、ただstore
メソッドを呼び出してください。
/**
* ユーザのアバター更新
*
* @param Request $request
* @return Response
*/
public function update(Request $request)
{
$path = $request->file('avatar')->store('avatars', 's3');
return $path;
}
アップロード済みファイルの保存についての情報は、ドキュメントをお読みください。
WebpackとLaravel Elixir
Laravel5.3と同時に、WebpackとRollup JavaScript
モジュールバンドラのサポートを伴い、Laravel Elixir
6.0がリリースされました。デフォルトでLaravel5.3のgulpfile.js
ファイルは、WebpackをJavaScriptをコンパイルするために使用します。Laravel
Elixirのドキュメントには、両バンドラに対するより多くの情報が用意されています。
elixir(mix => {
mix.sass('app.scss')
.webpack('app.js');
});
フロントエンド構造
Laracastsでこの機能の無料ビデオチュートリアルがご覧いただけます。
Laravel5.3はよりモダンなフロントエンド構造になりました。これは主にmake:auth
認証スカフォールドに影響を与えています。フロントエンドアセットをCDNからロードする代わりに、依存パッケージがデフォルトのpackage.json
ファイルで指定されています。
さらに、シングルファイルVueコンポーネントが初めから含まれています。サンプルExample.vue
コンポーネントが、resources/assets/js/components
ディレクトリに用意されています。それに付け加え、新しいresources/assets/js/app.js
ファイルがJavaScriptライブラリ、適切であればVueコンポーネントも起動、設定しています。
この構造は、モダンで堅牢なJavaScriptアプリケーションの構築を特定のJavaScriptやCSSフレームワークを必要とせずに、開発し始めるためのガイダンスとなるでしょう。モダンなLaravelフロント開発を始めるための情報は、新しいフロントエンド入門のドキュメントで確認してください。
ルートファイル
デフォルトで真新しいLaravel5.3アプリケーションには、新しいトップレベルのroutes
ディレクトリの中に、2つのHTTPルートファイルを用意しています。web
とapi
ルートファイルは、WebインターフェイスとAPIのルートをどう分けたら良いかという、明確なガイダンスを提供します。api
ルーファイル内のルートは、自動的にRouteServiceProvider
により、api
プレフィックスが割りつけられます。
クロージャコンソールコマンド
コマンドクラスとしての定義に付け加え、Artisanコマンドはシンプルなクロージャとして、app/Console/Kernel.php
ファイルのcommands
メソッドで、定義できるようになりました。真新しいLaravel5.3アプリケーションでは、コンソールコマンドをルートのように、アプリケーションを指し示すクロージャベースのエントリ定義するroutes/console.php
ファイルをcommands
メソッドがロードします。
Artisan::command('build {project}', function ($project) {
$this->info('Building project...');
});
クロージャコマンドについての情報は、Artisanのドキュメントで確認してください。
$loop
変数
Laracastsでこの機能の無料ビデオチュートリアルがご覧いただけます。
Bladeテンプレートの中でループする場合、$loop
変数が使用できます。現在のループインデックスやループの最初や最後の繰り返しかどうかなどの、便利なちょっとした情報へ、この変数でアクセスできます。
@foreach ($users as $user)
@if ($loop->first)
これは最初の繰り返し
@endif
@if ($loop->last)
これは最後の繰り返し
@endif
<p>これは{{ $user->id }}のユーザ</p>
@endforeach
より多くの情報は、Bladeのドキュメントをお読みください。
Laravel 5.2
Laravel5.2は5.1に引き続き、持続的な向上を目指し、複数認証ドライバのサポート、暗黙のモデル結合、Eloquentグローバルスコープの簡略化、オプトイン認証スカフォールド、ミドルウェアグループ、レート限定ミドルウェア、配列バリデーションの向上などを追加しています。
認証ドライバ/「複数認証」
Laravelの以前のバージョンではデフォルトのみの、セッションベースの認証ドライバーをサポートしており、アプリケーションで2つ以上の認証モデルが使えませんでした。
しかし、Laravel5.2では、追加の認証ドライバを定義でき、同時に複数の認証モデルやユーザテーブルも定義可能です。それぞれ独立して認証プロセスをコントロールできます。たとえば、"admin(管理者)"ユーザのデータベーステーブルと、"student(生徒)"のデータベーステーブルを用意し、それぞれのテーブルに対し独立して認証するためにAuth
のメソッドが使えるようになりました。
認証のスカフォールド
Laravelでは既に、バックエンドの認証を簡単に処理できるようになっています。しかし、Laravel5.2では便利に、素早くフロントエンドの認証ビューをスカフォールドする方法を提供しました。ターミナルで、ただmake:auth
コマンドを実行するだけです。
php artisan make:auth
このコマンドは単純なBootstrapと互換性のある、ユーザログイン、登録、パスワードリセットのビューを生成します。コマンドはさらに、適切なルート追加するように、ルートファイルを更新します。
Note: この機能は新しいアプリケーションだけで使用スべきもので、アプリケーションのアップグレードでは行わないでください。
暗黙のモデル結合
暗黙のモデル結合は、ルートやコントローラに直接関連のあるモデルを何の苦労もなしに依存注入します。たとえば、以下のようなルート定義を考えましょう。
use App\User;
Route::get('/user/{user}', function (User $user) {
return $user;
});
Laravel5.1では通常、Route::model
メソッドを使い、ルート定義中の{user}
パラメータには、App\User
インスタンスを注入するように指示する必要がありました。しかし、Laravel5.2では、必要なモデルインスタンスに素早くアクセスできるように、フレームワークが自動的にURIセグメントに基づき依存注入します。
ルートパラメータのセグメント({user}
)が、ルートクロージャかコントローラメソッドの対応する変数名('$user')であり、その変数のタイプヒントがEloquentモデルクラスの場合、自動的にそのモデルを依存注入します。
ミドルウェアグループ
ミドルウェアグループは、ルートへ一度に多くのミドルウェアを割りつけられるように、一つの手頃なキーに多くのルートミドルウェアをまとめる機能です。たとえばこれは、同じアプリケーションでWebのUIとAPIを構築する時に便利です。web
グループにはセッションとCSRFミドルウェアをまとめ、たぶんapi
グループではレート制限をまとめたいと考えるでしょう。
実際、Laravel5.2のデフォルトアプリケーション構造は、このアプローチに従っています。例えば、デフォルトのApp\Http\Kernel.php
ファイルには、以下のコードが含まれています。
/**
* アプリケーションのミドルウェアグループ
*
* @var array
*/
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
],
];
ですから、web
グループは、ルートに次のように割りつけられます。
Route::group(['middleware' => ['web']], function () {
//
});
しかし、RouteServiceProvider
の中において、デフォルトミドルウェアグループ下でルートファイルをincludeしているため、デフォルト状態でルートには、既にweb
ミドルウェアグループが適用されることを覚えておいてください。
レート制限
新しいレート制限ミドルウェアがフレームワークに含まれ、あるIPアドレスからの、一分間に指定した回数より多いルートへのアクセスを簡単に制限できるようになりました。たとえば、あるIPからのアクセスを毎分60回に制限したい場合は、次のように指定します。
Route::get('/api/users', ['middleware' => 'throttle:60,1', function () {
//
}]);
配列のバリデーション
配列のフォーム入力フィールドに対するバリデーションは、Laravel5.2でより簡単になりました。指定した配列の各メールアドレスフィールドがユニークであることをバリデートするには、次のようにします。
$validator = Validator::make($request->all(), [
'person.*.email' => 'email|unique:users'
]);
同様に*
文字を使い、配列ベースのフィールドでも通常のバリデーションメッセージと同じように簡単に、言語ファイル中のバリデーションメッセージを指定できます。
'custom' => [
'person.*.email' => [
'unique' => 'Each person must have a unique e-mail address',
]
],
Bailバリデーションルール
新しいbail
(保釈)バリデーションルールが追加されました。これはバリデータに、ルールで指定された最初のバリデーションに失敗したら、その後のバリデーションを停止するように指示します。たとえば、以下の例では属性がinteger
のチェックに失敗したら、バリデータはunique
のチェックを行いません。
$this->validate($request, [
'user_id' => 'bail|integer|unique:users'
]);
Eloquentグローバルスコープの向上
以前のバージョンのLaravelでは、グローバルEloquentスコープは複雑で間違いやすい実装でした。しかし5.2では、グローバルクエリスコープはシンプルなメソッド、apply
ひとつだけを実装するだけです。
グローバルスコープを書くための情報は、十分な説明のあるEloquentのドキュメントを参照してください。
Laravel 5.1.11
Laravel 5.1.11では認可が初めからサポートされています! アプリケーションの認可ロジックをシンプルなコールバックかポリシークラスを使い便利に統合でき、アクションをシンプルで記述的なメソッドを使い認可できます。
詳細は認可のドキュメントを参照してください。
Laravel 5.1.4
Laravel5.1.4でシンプルなログイン制限がフレームワークに導入されました。詳細は認証のドキュメントで確認してください。
Laravel 5.1
Laravel5.1はPSR-2を採用し、イベントのブロードキャスト、ミドルウェアパラメーター、Artisanの改良など、Laravel5.0から継続的に向上しています。
PHP 5.5.9++
PHP5.4は9月に「役目を終える」ことになり、PHP開発チームからセキュリティアップデートを受けられなくなりますので、Laravel5.1はPHP5.5.9以上を動作要件とします。PHP5.5.9はGuzzleやAWS SDKのように人気のあるPHPライブラリーの最新バージョンと互換性があります。
LTS
Laravel5.1は最初の長期間サポートリリースになります。Laravel5.1はバグフィックスを2年間、セキュリティフィックスを3年間提供します。このサポート期間は今までのリリースで一番長く、安定性と心の平和を大きなエンタープライズの顧客に提供します。
PSR-2
PSR-2コーディングスタイルガイドがLaravelフレームワークの標準スタイルガイドとして採用されました。さらに全ジェネレーターがPSR-2と互換性のある記法を生成するように更新されました。
ドキュメント
Laravelのドキュメントの全ページは注意深く見直され、大きく向上しました。全サンプルコードはレビューされ、より適切でコンテキストに合うように更新されました。
イベントブロードキャスト
近代的なWebアプリケーションでは、リアルタイムですぐに更新されるユーザインターフェイスを実装するために、Webソケットが使用されています。あるデータがサーバーで更新されると、そのメッセージはWebソケット接続を通じ、クライアントで処理されるように送信されます。
こうしたタイプのアプリケーションを構築する手助けになるように、LaravelはイベントをWebソケット接続上へ簡単に「ブロードキャスト」できるようにしました。Laravelイベントをブロードキャストすることにより、同じイベント名をサーバーサイドのコードとクライアントサイドのJavaScriptフレームワークとで共有できるようになります。
イベントのブロードキャストをより詳しく知るには、イベントのドキュメントを読んでください。
ミドルウェアパラメーター
ミドルウェアは追加のカスタムパラメーターを受け取れるようになりました。たとえば、指定されたアクションを取る前に、指定された「役割(role)」を認証済みユーザが持っているかをアプリケーションで確認する必要があるとします。役割名を追加の引数として受け取るRoleMiddleware
を作成することができます。
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware
{
/**
* リクエストフィルターの実行
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string $role
* @return mixed
*/
public function handle($request, Closure $next, $role)
{
if (! $request->user()->hasRole($role)) {
// リダイレクト処理…
}
return $next($request);
}
}
ミドルウエアパラメーターはルートを定義するときに指定され、ミドルウェア名とパラメーターを:
で区切ります。複数のパラメーターはカンマで区切ります。
Route::put('post/{id}', ['middleware' => 'role:editor', function ($id) {
//
}]);
ミドルウェアについての詳細については、ミドルウェアのドキュメントを調べてください。
テストのオーバーオール
Laravelの組み込みテスト機構は大幅に向上しました。アプリケーションと関連し、レスポンスを調べるためのスラスラと記述しやすいインターフェイスの新しいメソッドが数多く提供されました。以下のテストを見てください。
public function testNewUserRegistration()
{
$this->visit('/register')
->type('Taylor', 'name')
->check('terms')
->press('Register')
->seePageIs('/dashboard');
}
テストの詳細は、テストのドキュメントを確認してください。
モデルファクトリ
モデルファクトリを使い、Eloquentモデルのスタブを簡単に作成する方法が提供されました。モデルファクトリによりEloquentモデルの「デフォルト」属性を定義し、テストやデータベースシーディング(初期値設定)に利用するモデルインスタンスを簡単に生成できます。また、ランダムな属性データーを生成するためのFaker PHPライブラリーの強力な機能をモデルファクトリで使えます。
$factory->define(App\User::class, function ($faker) {
return [
'name' => $faker->name,
'email' => $faker->email,
'password' => str_random(10),
'remember_token' => str_random(10),
];
});
モデルファクトリの詳細は、ドキュメントを参照してください。
Artisanの向上
Artisanコマンドは、コマンドラインの引数とオプションを定義するための、とても簡単なインターフェイスを提供するルート定義のような「使い方」で指定できるようになりました。たとえば、シンプルなコマンドとオプションを定義してみましょう。
/**
* コンソールコマンドの名前と使用方法
*
* @var string
*/
protected $signature = 'email:send {user} {--force}';
Artisanコマンドの定義の詳細は、Artisanのドキュメントを読んでください。
フォルダー構造
より意図が分かりやすいように、app/Commands
ディレクトリはapp/Jobs
に名前が変更されました。さらに、app/Handlers
ディレクトリは、イベントリスナ専用のapp/Listeners
に統合されました。しかしこれは互換性を崩す変更ではなく、Laravel5.1の新しいフォルダー構造へ更新する必要はありません。
暗号化
以前のバージョンのLaravelはPHPのmcrypt
拡張により暗号化が行われていました。Laravel5.1からは、より活発にメンテナンスが行われているopenssl
拡張により暗号化が処理されます。
Laravel 5.0
Laravel5.0では、Laravelプロジェクトに対する全く新しいアプリケーション構造が、デフォルトとして導入されました。この新構造は、Laravelで堅牢なアプリケーションを構築するためより良い基礎となり、同時にアプリケーション全体へ新しいオートローディング規約(PSR-4)を適用します。最初に、大きな変更点を確認しましょう。
新フォルダー構造
古いapp/models
ディレクトリは完全に取り除かれました。代わりに、皆さんの全コードは直接app
フォルダーの中に記述し、デフォルトではApp
名前空間として統合されます。このデフォルト名前空間は、app:name
Artisanコマンドを使い、簡単に変更できます。
コントローラー、ミドルウェア、リクエスト(Laravel5.0の新しいクラスタイプ)は、アプリケーションのHTTPトランスポート層と関連するクラスとして、app/Http
ディレクトリ下に全部まとめられます。構造を持たない一つのルートフィルターファイルの代わりに、全ミドルウェアーは、それぞれのクラスファイルへ分割されました。
新しいapp/Providers
ディレクトリが、以前のLaravel4.xで使われていたapp/start
ファイルに置き換わりました。これらのサービスプロバイダは、エラーハンドリング、ロギング、ルートのロードなど、アプリケーションの様々な機能の初期準備を担います。もちろん、自分のアプリケーションのために、追加のサービスプロバイダを自由に作成できます。
アプリケーションの言語ファイルとビューは、resources
ディレクトリへ移動しました。
契約
Laravelの主要なコンポーネント全ての実装インターフェイスが、illuminate/contracts
リポジトリーの中に設置されてました。このリポジトリーは外部依存していません。分離性と依存注入のため、使用しているインターフェイスが一箇所にまとまっている利点により、Laravelファサードへ別の選択肢を簡単に導入できるでしょう。
契約の詳細は、ドキュメントに全て記載されています。
ルートキャッシュ
If your application is made up entirely of controller routes, you may
utilize the new route:cache
Artisan command to drastically
speed up the registration of your routes. This is primarily useful on
applications with 100+ routes and will drastically
speed up this portion of your application.
ルートミドルウェア
Laravel4スタイルのルート「フィルター」に付け加え、Laravel5ではHTTPミドルウェアもサポートしています。認証やCSRF「フィルター」はミドルウェアに変更されました。ミドルウェアはリクエストがアプリケーションに完全に届く前に検査や、拒否さえも簡単にできるように、全タイプのフィルターを置き換えられる一つの首尾一貫したインターフェイスを提供します。
ミドルウェアの詳細は、ドキュメントで確認してください。
コントローラーメソッドインジェクション
既存のコンストラクターインジェクションに付け加え、今度はコントローラーメソッドでもタイプヒントによる依存指定ができるようになりました。ルートメソッドに別の引数が存在していても、サービスコンテナが自動的に依存を注入します。
public function createPost(Request $request, PostRepository $posts)
{
//
}
認証のスカフォールド
ユーザ登録、認証、パスワードリセットコントローラーは、最初から準備されています。同時に対応するビューも、resources/views/auth
に用意されます。さらに、"users"テーブルのマイグレーションも含まれています。簡単なリソースが用意されていることにより、認証の定形コードに手間取ること無く、アプリケーションのアイデアを素早く開発できるようになります。認証ビューへアクセスするルートは、auth/login
とauth/register
です。App\Services\Auth\Registrar
サービスは、ユーザバリデーションと作成に責任を持っています。
イベントオブジェクト
イベントは単なる文字列の代わりに、オブジェクトとして定義されます。以下のイベント例で確認してください。
<?php
class PodcastWasPurchased
{
public $podcast;
public function __construct(Podcast $podcast)
{
$this->podcast = $podcast;
}
}
イベントは普通にディスパッチできます。
Event::fire(new PodcastWasPurchased($podcast));
もちろん、イベントハンドラは、データのリストの代わりに、イベントオブジェクトを受け取ります。
<?php
class ReportPodcastPurchase
{
public function handle(PodcastWasPurchased $event)
{
//
}
}
イベント関連の詳細情報は、ドキュメントで完全に記載されています。
コマンド/キューイング
Laravel4でサポートしているキュージョブの形式に付け加え、Laravel5ではキューするジョブをシンプルなコマンドオブジェクトとして表すことができるようになりました。これらのコマンドは、app/Commands
ディレクトリに設置します。サンプルコマンドをご覧ください。
<?php
class PurchasePodcast extends Command implements SelfHandling, ShouldBeQueued
{
use SerializesModels;
protected $user, $podcast;
/**
* 新しいコマンドインスタンスの生成
*
* @return void
*/
public function __construct(User $user, Podcast $podcast)
{
$this->user = $user;
$this->podcast = $podcast;
}
/**
* コマンド実行
*
* @return void
*/
public function handle()
{
// ポッドキャスト購入ロジックの処理…
event(new PodcastWasPurchased($this->user, $this->podcast));
}
}
コマンドを簡単に実行できるように、ベースLaravelコントローラーで、DispatchesCommands
トレイトが使用されています。
$this->dispatch(new PurchasePodcastCommand($user, $podcast));
もちろん、(キューに入れず)タスクを同期的に実行するコマンドを使用することもできます。実際、アプリケーションで実行する必要のある複雑なタスクをカプセル化するため、コマンドは良い手段です。詳細は、コマンドバスのドキュメントで確認してください。
データベースキュー
database
キュードライバがLaravelに追加されました。データベースソフトウェアの他、余計な追加パッケージが必要がない、シンプルなローカルのキュードライバです。
Laravelスケジューラー
これまで開発者は、時間で実行したいコンソールコマンドに対し、一つ一つCronエントリーを作成してきました。しかし、これは面倒でした。コンソールスケジューラーはソースコントロールされておらず、Cronエントリを追加するためにSSHでサーバーに接続する必要がありました。人生をより簡単にしましょう。LaravelコマンドスケジューラーはLaravel自身の中でコマンドスケジュールがスラスラと記述的に定義できるようにしてくれ、サーバーに必要なCronエントリはたったひとつだけです。
以下のような定義します。
$schedule->command('artisan:command')->dailyAt('15:00');
もちろん、スケジューラーの全てを学習したい場合は、ドキュメントを確認してください。
Tinker/Psysh
php artisan tinker
コマンドは、より堅牢なPHP
REPLであるJustin Hileman作成のPsyshを使用するようになりました。Laravel4のBorisがお気に入りなら、Psyshはもっと好みでしょう。より良いことに、Windowsでも動作します!php artisan tinker
で試し始めてください。
php artisan tinker
DotEnv
環境設定ディレクトリがネストし、色々と混乱させる代わりに、Laravel5ではVance Lucas制作のDotEnvを使用しています。このライブラリーは環境設定を管理するとても単純な手法を提供しており、Laravel5での環境決定は簡単です。詳細は、設定のドキュメントをご覧ください。
Laravel Elixir
Laravel ElixirはJeffrey Wayにより開発された、アセットをコンパイルしたり、結合したりするためにスラスラと表現できるインターフェイスを提供しています。もしもGruntやGulpの学習が恐ろしくても、怖がる必要はありません。ElixirはLessやSass、CoffeeScriptをコンパイルするために、Gulpを簡単に使い始めさせてくれます。さらにテストまで実行してくれます!
Elixirの詳細は、ドキュメントで確認してください。
Laravel Socialite
Laravel Socialite is an optional, Laravel 5.0+ compatible package that provides totally painless authentication with OAuth providers. Currently, Socialite supports Facebook, Twitter, Google, and GitHub. Here's what it looks like:
public function redirectForAuth()
{
return Socialize::with('twitter')->redirect();
}
public function getUserFromProvider()
{
$user = Socialize::with('twitter')->user();
}
OAuth認証のフローを書くために、時間を費やす必要はもうありません。数分で使用開始できます!ドキュメントで詳細が全部説明されています。
Flysystemの統合
Laravelは強力なFlysystem抽象ファイルシステムライブラリーを採用しました。これにより、統一されたエレガントなAPI一つで、ローカルストレージ、Amazon S3、Rackクラウドストレージを苦労なしに統合できます。
Storage::put('file.txt', 'contents');
LaravelとFlysystemの統合についての詳細は、ドキュメントをご覧ください。
フォームリクエスト
Laravel5.0は、Illuminate\Foundation\Http\FormRequest
を拡張したクラスである、フォームリクエストを導入しました。このリクエストオブジェクトは、コントローラーメソッドインジェクションにより注入され、定形処理コードを書かなくとも、ユーザ入力のバリデーションが行えます。FormRequest
のサンプルを掘り下げ確認してみましょう。
<?php
namespace App\Http\Requests;
class RegisterRequest extends FormRequest
{
public function rules()
{
return [
'email' => 'required|email|unique:users',
'password' => 'required|confirmed|min:8',
];
}
public function authorize()
{
return true;
}
}
クラスが定義できれば、コントローラーアクションでタイプヒントを指定できます。
public function register(RegisterRequest $request)
{
var_dump($request->input());
}
Laravel
サービスコンテナがFormRequest
インスタンスの注入を認識すると、そのリクエストは自動的にバリデーションが行われます。つまり、コントローラーのアクションが呼び出された時には、そのフォームリクエストクラスに指定したルールに従い、HTTPリクエストは入力のバリデーションに通され確認済みであると、安心して想定できます。さらに、リクエストがバリデーションに引っかかった場合、HTTPリダイレクトが自動的に行われ(カスタマイズ可能)、エラーメッセージもセッションにフラッシュデーターとして保存されるか、JSONに変換されます。
フォームバリデーションはこれまでないくらいにシンプルになりました。
FormRequest
バリデーションの詳細は、ドキュメントをご覧ください。
シンプルなコントローラーリクエストバリデーション
Laravel5のベースコントローラーは、ValidatesRequests
トレイトを取り込んでいます。このトレイトは、やってきたリクエストを手間なくバリデートする、validate
メソッドを提供しています。もし、FormRequest
があなたのアプリケーションでは、多少大げさすぎるならば、これを使ってみてください。
public function createPost(Request $request)
{
$this->validate($request, [
'title' => 'required|max:255',
'body' => 'required',
]);
}
バリデーションが失敗すると、例外が投げられ、適切なHTTPレスポンスが自動的にブラウザへ送り返されます。バリデーションエラーもフラッシュデータとしてセッションに保存されます!AJAXリクエストの場合、Laravelはバリデーションエラーを表すJSONを送り返す面倒も見ます。
この新しいメソッドの詳細は、ドキュメントをご覧ください。
新ジェネレーター
新しいデフォルトアプリケーション構造を手助けするため、Artisan生成コマンドが新しくフレームワークに追加されました。詳細は、php artisan listで確認してください。
設定のキャッシュ
config:cache
コマンドを使用して、全設定ファイルを一つのファイルへキャッシュできるようになりました。
Symfony VarDumper
変数をデバッグ情報としてダンプする、人気のdd
ヘルパ関数が、素晴らしいSymfony
VarDumperを使用するようにアップグレードされました。これは出力を色分けし、配列を折りたたむこともできます。プロジェクトで以下のように使用してください。
dd([1, 2, 3]);
Laravel 4.2
このリリースの完全な変更リストは、4.2をインストールし、php artisan changes
コマンドを実行するか、GitHubで変更を確認してください。このセクションの記述は、リリースの主要な向上点と変更だけを示しています。
注意: 4.2のリリースまでの間に、多くの様々な小さなバグ修正や改善が、Laravel4.1に取り込まれてきました。ですから、Laravel4.1の変更リストも注意深くチェックしてください。
PHP 5.4が必要
Laravel4.2を動作させるには、PHP5.4以上が必要です。このPHPに関する動作要件の引き上げにより、Laravelキャッシャーなどのツールで、より記述的なインターフェイスを提供するための、トレイトのような新しい機能を使用することができるようになりました。更に、PHP5.4はPHP5.3よりも、大きな速度と効率の向上をもたらしてくれます。
Laravel Forge
Laravel Forgeは、新しいWebベースアプリケーションで、皆さんが選んだLinode、DigitalOcean、Rackspace、Amazon EC2のようなクラウド上で、PHPサービスを作成し管理する、シンプルな方法を提供しています。自動的なNginx設定、SSHキーアクセス、cronジョブの自動化、NewRelicとPapertrailによるサーバー監視、「Pushによるデプロイ」、Laravelキュー・ワーカー設定などをサポートしています。Forgeは皆さんのLaravelアプリケーション全部をランチする、最もシンプルで、手に入れやすい手法です。
インストールしたLaravel4.2の中の、app/config/database.php
設定ファイルが、デフォルトでForge使用の設定ファイルになり、プラットフォームへ真新しいアプリケーションを便利にデプロイできるようにしてくれます。
Laravel Forgeの詳細な情報は、Forgeの公式Webサイトをご覧ください。
Laravel Homestead
Laravel
Homesteadは、強固なLaravelとPHPアプリケーションをデプロイするための、公式Vagrant環境です。配布のためにboxをバッケージする前に、広大な範囲に渡る、必要なboxの準備作業は処理済みですから、非常に素早くboxを起動可能です。Homesteadは、Nginx1.6、PHP5.6、MySQL、Postgres、Redis、Memcached、Beanstalk、Node、Gulp、Grunt、Bowerを用意しています。HomesteadはシンプルなHomestead.yaml
設定ファイルを含んでおり、複数のLaravelアプリケーションを一つのboxで管理しています。
インストールしたLaravel4.2に含まれており、初めから用意されているHomesteadデータベースを使用するために設定されている、app/config/local/database.php
設定ファイルは、Laravelの初期インストールと設定をより便利にしています。
公式ドキュメントにも、Homesteadのドキュメントが追加されました。
Laravelキャッシャー
Laravelキャッシャーは、Stripeを使用し、購読の課金を管理するための、シンプルで記述的なライブラリーです。Laravel4.2で紹介し、キャッシャーのドキュメントも、Laravelのメインドキュメントに含めましたが、コンポーネントのインストールはまだオプションです。このリリースのキャッシャーは、多くのバグが修正され、複数通貨をサポートし、最新のStripe APIとコンパチブルです。
デーモン・キュー・ワーカー
Artisanのqueue:work
コマンドは、--daemon
オプションをサポートし、ワーカーを「デーモンモード」で開始できます。つまり、ワーカーはフレームワークを再起動することなく、ジョブの処理を継続します。この結果、CPU使用率は大幅に減らすことができましたが、アプリケーションのデプロイ手段がやや複雑になるという犠牲を払う必要があります。
デーモン・キュー・ワーカーに関する情報は、キューのドキュメントをご覧ください。
メールAPIドライバ
Laravel4.2は、新しいMailgunとMandrill APIドライバをメール機能に導入しました。多くのアプリケーションにとって、SMTPを使用する選択肢よりも、メールを送信する手段として、より早く、より信頼が置けるでしょう。新しいドライバは、Guzzle 4 HTTPライブラリーを使用しています。
ソフトデリート・トレイト
PHP5.4のトレイトを使用し、「ソフトデリート」の構造をより美しくし、「グローバルスコープ」を導入しました。この新しい構造により、グローバルトレイトに似た簡単な記述法ができ、フレームワーク内部の関心の分離をよりきれいに実現できます。
新しいSoftDeletingTrait
に関する詳細はEloquentのドキュメントをご覧ください。
便利な認証とパスワードリマインダーのトレイト
Laravel4.2は、認証とパスワードリマインダーのユーザインターフェイスに必要なプロパティを含むシンプルなトレイトを使用するようになりました。これにより、初めから含まれているデフォルトのUser
モデルファイルをより美しく提供できます。
シンプル・ペジネーション
新しいsimplePaginate
メソッドが、クエリとEloquentビルダに追加され、ペジネーションビューに、シンプルな「次」と「前」リンクを使用したい場合に、より効率的なクエリが行えるようになりました。
マイグレーション時の確認
実働時には、破壊的なマイグレーション操作には、確認を尋ねるようになりました。コマンドをプロンプト無しで実行する場合は、--force
オプションを使用してください。
Laravel 4.1
完全な変更リスト
今回のリリースの完全な変更リストは、インストールした4.1でphp artisan changes
コマンドを実行することで表示されます。もしくは、GitHub上の変更JSONファイルをご覧ください。
新SSHコンポーネント
全く新しいSSH
コンポーネントがこのリリースで導入されました。これが提供する機能は、SSHを使い簡単にリモートサーバーでコマンドを実行することです。詳しくは、SSHコンポーネントのドキュメントをご覧ください。
新しいphp artisan tail
コマンドは、この新SSHコンポーネントを活用しています。詳細は、tailコマンドドキュメントをご覧ください。
TinkerとBoris
php artisan tinker
コマンドは、システムがサポートしている場合、Boris
REPLを活用します。この機能を利用するには、readline
とpcntl
PHP拡張をインストールする必要があります。これらの拡張が用意出来な場合は、4.0以上のシェルが利用できます。
Eloquentの向上
新しいhasManyThrough
リレーションがEloquentに追加されました。どのように使用するかは、Eloquentドキュメントをご覧ください。
また、新しいwhereHas
メソッドがリレーションの条件に基づいてモデルを取得するために導入されました。
データベースRead/Write接続
クエリビルダとEloquent使用時に、データベース層でRead/Write接続により接続を自動的に分けられるようになりました。詳細はドキュメントをご覧ください。
クエリの優先度
queue:listen
コマンドに、カンマ区切りでリストを指定することによる、キュー処理のプライオリティーがサポートされました。
失敗したキュージョブの処理
queue:listen
へ新しい--tries
スイッチをつけることで、失敗したジョブを自動的に処理する機能が追加されました。失敗したジョブに関するより詳しい説明は、キューのドキュメントをご覧ください。
キャッシュタグ
キャッシュの"section"は"tags"に置き換わりました。キャッシュのタグにより、複数のタグをキャッシュアイテムにつけることができます。そして、タグを指定することで、一度に全部のアイテムを消去できます。キャッシュタグの使い方の情報は、キャッシュのドキュメントに記載されています。
柔軟になったパスワードリマインダー
パスワードのバリデーション、セッションにフラッシュアイテムとして保存するメッセージの使用など、パスワードリマインダー(リセット)は、開発者が柔軟に使用できるように変更されました。修正パスワードリマインダーエンジンの詳細は、ドキュメントをご覧ください。
ルーティングエンジンの向上
Laravel 4.1ではルーティング層が完全に書き換えられています。APIに変更はありませんが、ルートの登録は、4.0と比べ完全に100%早くなっています。エンジン全体はとてもシンプルになり、ルートの解釈時のSymfony Routingへの依存が小さくなりました。
セッションエンジンの向上
このリリースでは、新しいセッションエンジンも導入しました。ルーティングでの向上と同様に、新しいセッション層はより小さく、早くなりました。Symfonyの(そのためにPHPのも)セッション処理機能を使用しなくなり、よりシンプルでメンテナンスしやすいカスタム処理を使用しています。
Doctrine DBAL
もしrenameColumn
機能をマイグレーションで使用している場合、composer.json
ファイルにdoctrine/dbal
パッケージを追加する必要があります。このパッケージはデフォルトではLaravelに含まれなくなりました。