このリポジトリはPHP Webアプリフレームワークである、LaravelのLTSバージョンである5.5の公式英文ドキュメントを日本語へ翻訳しています。
This project is maintained by okinaka
{note} 私達は、互換性を失う可能性がある変更を全部ドキュメントにしようとしています。しかし、変更点のいくつかは、フレームワークの明確ではない部分で行われているため、一部の変更が実際にアプリケーションに影響を与えてしまう可能性があります。
Laravel5.5では、PHP7.0.0以上が必要です。
composer.json
ファイル中の、laravel/framework
依存指定を5.5.*
へ変更してください。さらに、phpunit/phpunit
の依存指定を~6.0
へ更新してください。次に、composer.json
ファイルのrequire-dev
セクションに、filp/whoops
パッケージのバージョン~2.0
を追加します。最後に、composer.json
ファイルのscripts
セクションで、post-autoload-dump
イベントに対しpackage:discover
コマンドを追加します。
"scripts": {
...
"post-autoload-dump": [
"Illuminate\Foundation\ComposerScripts::postAutoloadDump",
"@php artisan package:discover"
],
}
もちろん、アプリケーションで使用しているサードパーティ製パッケージを調べ、Laravel5.5に適切なバージョンを使っていることも忘れず確認してください。
{tip}
laravel new
を使い、Laravelインストーラによりインストールしている方は、composer global update
コマンドにより、インストーラパッケージを更新してください。
Laravel5.5とヘッドレスChromeでのテストに対し互換性のある、Laravel Dusk 2.0.0
がリリースされました。
Pusherイベントブロードキャストドライバーは、Pusher SDKのバージョン~3.0
が必要となりました。
Laravel5.5では、バージョン~6.0
のSwift Mailerが必要です。
Laravel5.5では、カーネルへ一々登録しなくても、Artisanはコマンドを自動的に見つけ出します。この新機能を利用するには、App\Console\Kernel
クラスへ以下のように、commands
メソッドを追加してください。(訳注:loadメソッドの間違い)
$this->load(__DIR__.'/Commands');
fire
メソッドArtisanコマンド中のfire
メソッドは、handle
へリネームしてください。
optimize
コマンド最近のPHPのオペコードキャッシュの向上により、optimize
Artisanコマンドは必要なくなりました。将来のリリースでLaravelから削除されるため、デプロイスクリプトからこのコマンドを外してください。
authorizeResource
コントローラメソッドauthorizeResource
メソッドへ複数の単語のモデル名を渡したとき、リソースコントローラの振る舞いと合わせるため、ルートセグメントは「スネーク」ケースになりました。
before
ポリシーメソッドポリシークラスにチェックしようとするアビリティの名前と一致する、メソッドが含まれていない場合、before
メソッドは呼び出されなくなりました。
データベースキャッシュドライバを使用している場合、Laravel5.5へアップグレードしたアプリケーションを最初にデプロイする時に、php artisan cache:clear
を実行してください。
belongsToMany
メソッドEloquentモデルのbelongsToMany
メソッドをオーバーライドしている場合、新しく追加された引数を反映するように、引数を更新してください。
/**
* 多対多リレーションの定義
*
* @param string $related
* @param string $table
* @param string $foreignPivotKey
* @param string $relatedPivotKey
* @param string $parentKey
* @param string $relatedKey
* @param string $relation
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function belongsToMany($related, $table = null, $foreignPivotKey = null,
$relatedPivotKey = null, $parentKey = null,
$relatedKey = null, $relation = null)
{
//
}
getQualifiedRelatedKeyName
getQualifiedRelatedKeyName
メソッドは、getQualifiedRelatedPivotKeyName
へリネームされました。
getQualifiedForeignKeyName
getQualifiedForeignKeyName
メソッドは、getQualifiedForeignPivotKeyName
へリネームされました。
is
メソッドEloquentモデルのis
メソッドをオーバーライドしている場合、メソッドからModel
のタイプヒントを削除してください。これにより、is
メソッドがnull
を引数に取れるようになります。
/**
* 2つのモデルが同じIDで、同じテーブルに属しているか判定
*
* @param \Illuminate\Database\Eloquent\Model|null $model
* @return bool
*/
public function is($model)
{
//
}
$events
プロパティモデルの$events
プロパティを$dispatchesEvents
へリネームしてください。多くのユーザーがevents
リレーションを定義する必要がありましたが、古いプロパティ名と競合していたため、変更されました。
$parent
プロパティIlluminate\Database\Eloquent\Relations\Pivot
クラスの$parent
protectedプロパティを$pivotParent
へ変更してください。
create
メソッドBelongsToMany
とHasOneOrMany
、MorphOneOrMany
クラスのcreate
メソッドは、$attributes
引数にデフォルト値を取るように変更されました。このメソッドをオーバーライドしている場合は、新しい定義に合わせて、引数を変更してください。
public function create(array $attributes = [])
{
//
}
モデルの「ソフトデリート」時に、モデルのexists
プロパティはtrue
のままになりました。
withCount
カラム形式エイリアス使用時、withCount
メソッドは、結果のカラム名に自動的に_count
を付けなくなりました。たとえば、Laravel5.4ではクエリにbar_count
カラムが結果に追加されていました。
$users = User::withCount('foo as bar')->get();
しかし、Laravel5.5では、エイリアスは指定された通りに使用されます。結果のカラムに、_count
を付けたい場合は、エイリアスを定義する時に、明確にサフィックスを指定します。
$users = User::withCount('foo as bar_count')->get();
配列アクセスを使う場合に、モデルのプライベートプロパティがアクセスされることを防ぐため、属性やプロパティと同じ名前のモデルメソッドを使えなくなりました。配列アクセス($user['name']
)やdata_get
ヘルパ関数により、モデルの属性へアクセスすることで、これが起きると例外が発生します。
Laravel5.5では、バリデーション例外を含むすべての例外は、例外ハンドラによりHTTPレスポンスへ変換されています。更に、JSONバリデーションエラーのデフォルトフォーマットが変更されました。新しいフォーマットは、以下の規約にしたがっています。
{
"message": "The given data was invalid.",
"errors": {
"field-1": [
"Error 1",
"Error 2"
],
"field-2": [
"Error 1",
"Error 2"
],
}
}
Laraverl5.4のJSONエラーフォーマットをそのまま使用したい場合は、App\Exceptions\Handler
クラスへ以下のメソッドを追加してください。
use Illuminate\Validation\ValidationException;
/**
* バリデーション例外をJSONレスポンスへ変換
*
* @param \Illuminate\Http\Request $request
* @param \Illuminate\Validation\ValidationException $exception
* @return \Illuminate\Http\JsonResponse
*/
protected function invalidJson($request, ValidationException $exception)
{
return response()->json($exception->errors(), $exception->status);
}
この変更は、JSONで試みる認証のバリデーションエラーフォーマットにも影響を与えます。Laravel5.5では、上記で説明した新しいフォーマット規約に従い、JSON認証に失敗したエラーメッセージも送り返されます。
個別のフォームリクエストの、レスポンスフォーマットをカスタマイズしている場合、failedValidation
メソッドをオーバーライドし、カスタムレスポンスを含めたHttpResponseException
例外インスタンスを投げてください。
use Illuminate\Http\Exceptions\HttpResponseException;
/**
* バリデーション試行の失敗の処理
*
* @param \Illuminate\Contracts\Validation\Validator $validator
* @return void
*
* @throws \Illuminate\Validation\ValidationException
*/
protected function failedValidation(Validator $validator)
{
throw new HttpResponseException(response()->json(..., 422));
}
files
メソッドIlluminate\Filesystem\Filesystem
クラスのfiles
メソッドは、$hidden
引数が追加され、allFiles
メソッドのようにSplFileInfo
オブジェクトの配列を返すようになりました。以前は、パス名の配列を返していました。新しい引数は以下の通りです。
public function files($directory, $hidden = false)
Illuminate\Contracts\Mail\MailQueue
契約のqueue
とlater
メソッドから、未使用の$data
と$callback
引数が削除されました。
/**
* 送信する新しいメールメッセージをキュー
*
* @param string|array|MailableContract $view
* @param string $queue
* @return mixed
*/
public function queue($view, $queue = null);
/**
* (n)秒後に送信する新しいメールメッセージをキュー
*
* @param \DateTimeInterface|\DateInterval|int $delay
* @param string|array|MailableContract $view
* @param string $queue
* @return mixed
*/
public function later($delay, $view, $queue = null);
dispatch
ヘルパ即時に実行するジョブをディスパッチし、handle
メソッドから値を返す場合は、ジョブのディスパッチにdispatch_now
か、Bus::dispatchNow
メソッドを使用してください。
use Illuminate\Support\Facades\Bus;
$value = dispatch_now(new Job);
$value = Bus::dispatchNow(new Job);
all
メソッドIlluminate\Http\Request
のall
メソッドをオーバーライドしてる場合は、新しい$keys
引数の使用方法を反映してください。
/**
* リクエストの入力とファイルをすべて取得
*
* @param array|mixed $keys
* @return array
*/
public function all($keys = null)
{
//
}
has
メソッド$request->has
メソッドは、入力が空文字列やnull
であってもtrue
を返すようになりました。以前のhas
の振る舞いを提供するため、新しい$request->filled
メソッドが追加されました。
intersect
メソッドintersect
メソッドは削除されました。この動作を模倣するため、$request->only
の引数で、array_filter
を使用してください。
return array_filter($request->only('foo'));
only
メソッドonly
メソッドはリクエストペイロードに実際に存在する属性のみの返すようになりました。only
メソッドの古い振る舞いを使いたい場合は、all
メソッドを代わりに使用してください。
return $request->all('foo');
request()
ヘルパrequest
ヘルパはネストしたキーを受け取らなくなりました。この振る舞いが必要であれば、リクエストのinput
メソッドを使用してください。
return request()->input('filters.date');
いくつかの認証アサートは、フレームワークの他とより一貫性を持たせるため、名前を変更しました。
seeIsAuthenticated
は、assertAuthenticated
へ変更dontSeeIsAuthenticated
は、assertGuest
へ変更seeIsAuthenticatedAs
は、assertAuthenticatedAs
へ変更seeCredentials
は、assertCredentials
へ変更dontSeeCredentials
は、assertInvalidCredentials
へ変更Mail
fakeをリクエスト中にMailableがキューされたことを判定するために使用しているなら、Mail::assertSent
の代わりにMail::assertQueued
を使用してください。この区別により、メールがバックグランド送信のためにキューされたが、リクエスト間では送られないことをアサートで指定できるようになりました。
Laravel Tinkerはアプリケーションクラスを参照する際の、省略した名前空間をサポートするようになりました。この機能にはComposerクラスマップの最適化が必要であるため、composer.json
ファイルのconfig
セクションへ、optimize-autoloader
ディレクティブを追加する必要があります。
"config": {
...
"optimize-autoloader": true
}
LoaderInterface
Illuminate\Translation\LoaderInterface
インターフェイスは、Illuminate\Contracts\Translation\Loader
へ変更になりました。
バリデータの全バリデーションメソッドは、protected
からpublic
へ変更になりました。
ビューと変数を共有するため、動的__call
メソッドが許されています。こうした変数は「キャメル」ケースとして自動的に使えるようになります。
return view('pool')->withMaximumVotes(100);
maximumVotes
変数へ、テンプレートから次のようにアクセスできます。
@php
Bladeディレクティブ@php
Bladeディレクティブは、インラインタグを引数に取らなくなりました。代わりにディレクティブを完全に記述してください。
@php
$teamMember = true;
@endphp
私達は皆さんへ、laravel/laravel
GitHubリポジトリで変更を確認することを勧めます。多くの変更は必須ではありませんが、皆さんのアプリケーションでは同期を取りたい変更もあることでしょう。そうした変更のいくつかは、このアップグレードガイドで取り扱っていますが、設定ファイルやコメントなどは載っていません。GitHub差分比較ツールで変更を簡単に確認できますので、自分にとってどの変更が重要であるかを洗い出せます。