20. マルチログイン
エラーメッセージ表示
バリデーションのエラーメッセージを画面表示します。 エラーメッセージは英語や日本語などのメッセージにわけて表示(Localize)することも可能です。
messages()
エラーメッセージは、messages() に「エラータイプ」と「メッセージ」の連想配列で設定します。
return [
'カラム1.エラータイプ1' => 'メッセージ1',
'カラム2.エラータイプ2' => 'メッセージ2',
...
];
ItemRequestのエラーメッセージ
ItemRequestのmessages() でエラーメッセージを設定します。
public function messages()
{
return [
'name.required' => Lang::get('messages.name_required'),
'code.required' => Lang::get('messages.code_required'),
'code.required' => Lang::get('messages.code_unique'),
'price.required' => Lang::get('messages.price_required'),
'price.integer' => Lang::get('messages.price_invalid'),
'price.min' => Lang::get('messages.price_invalid'),
'stock.integer' => Lang::get('messages.stock_invalid'),
'stock.min' => Lang::get('messages.stock_invalid'),
];
}
メッセージの多言語対応
Lang::get() は、messages.php で設定した文字を表示します。
Lang::get('メッセージファイル名.メッセージキー')
Lang::get() を使ってエラーメッセージを表示しますが、これは多言語対応するためです。
'カラム名.エラータイプ' => Lang::get('メッセージファイル名.メッセージキー'),
例えば、price.integer は price の integer エラーが発生すると、 messages.php ファイルの amount_invalid の値を表示します。
'price.integer' => Lang::get('messages.price_invalid'),
多言語化設定の作成
言語設定はen(英語) がデフォルトで、resources/lang/en/ にアクセスされます。
resources/lang/en/
messages.php の設定
resources/lang/en/ にmessages.phpを作成し、メッセージを設定します。 キーにはLang::get() で設定したメッセージキーを、値には実際のエラーメッセージを記述します。
return [
'price_invalid' => 'price is invalid.',
'amount_invalid' => 'amount is invalid.'
];
エラーメッセージの表示
設定したエラーメッセージを Blade ファイルで表示します。 今回はエラー表示用の Blade ファイルを外部コンポーネントで作成します。
エラーコンポーネントファイルの作成 resources/views/components/ にエラーコンポーネントファイル error_message.blade.php を作成します。
resources/views/components/error_message.blade.php PHP
エラーメッセージ
error_message.blade.phpを作成し、エラーメッセージを繰り返し表示します。
@if ($errors->any())
<div>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
エラーメッセージ確認
Laravel サーバにアクセスしてエラーメッセージを確認しましょう。 messages.php に設定した値が表示されれば成功です。
例えば、整数値の入力に対してマイナスの数値や文字列で更新した場合、エラーが表示されます。
ローカライズ
エラーメッセージや表示項目などを 1つだけでなく多言語に対応することも可能で、 これをローカライズといいます。resources/lang/ にフォルダをわけて多言語に対応します。
resources/lang/ロケール/設定ファイル名.php
日本語設定の追加 日本語設定を追加するには、resources/lang/en を resources/lang/ja/ でコピーするとよいでしょう。
ja/messages.php の設定(日本語) resources/lang/ja/message.php のメッセージを日本語で設定します。
<?php
return [
'price_invalid' => '値段が正しくありません。',
'amount_invalid' => '数量が正しくありません。',
];
app.php でロケールの変更 config/app.php はアプリの主要な設定ファイルで、ロケールの設定もできます。
デフォルトのロケール
デフォルトのロケールは locale に設定します。 ロケールを ja(日本語)に変更してみましょう。
'locale' => 'ja',
locale で設定したフォルダがないときは fallback_locale の設定で動作します。
'fallback_locale' => 'en',
日本語表示の確認
config/ のファイルを変更したときは、キャッシュクリアが必要になります。
% php artisan config:cache
キャッシュできたらブラウザで日本語のエラーが表示されるか確認してみましょう。
コントローラーで設定
Admin/ItemControllerで、ItemRequestをuseします。
use App\Models\Item;
//追加
use App\Http\Requests\ItemRequest;
ItemRequest を引数にする
add()のRequestをItemRequestに変更します。
public function add(ItemRequest $request)
{
...
}
ItemRequestは「メソッドインジェクション」で動作し、validate(入力チェック) をはじめとする事前処理をします。
前回の送信データ old() を利用すると、前回送信したデータを取得することができます。 第2引数に初期データを設定できます。
{{ old('name', @$item->name) }}
初期データが存在しない場合は、「@」をつけるなどしてエラー回避してもよいでしょう。
演習
編集画面のバリデート
編集処理をItemRequestを使ってバリデートしてみましょう。