20. マルチログイン

エラーメッセージ表示

バリデーションのエラーメッセージを画面表示します。 エラーメッセージは英語や日本語などのメッセージにわけて表示(Localize)することも可能です。

messages()

エラーメッセージは、messages() に「エラータイプ」と「メッセージ」の連想配列で設定します。

return [
  'カラム1.エラータイプ1' => 'メッセージ1',
  'カラム2.エラータイプ2' => 'メッセージ2',
  ...
];

ItemRequestのエラーメッセージ

ItemRequestmessages() でエラーメッセージを設定します。

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で、ItemRequestuseします。

use App\Models\Item;
//追加
use App\Http\Requests\ItemRequest;

ItemRequest を引数にする

add()RequestItemRequestに変更します。

public function add(ItemRequest $request)
{
    ...
}

ItemRequestは「メソッドインジェクション」で動作し、validate(入力チェック) をはじめとする事前処理をします。

前回の送信データ old() を利用すると、前回送信したデータを取得することができます。 第2引数に初期データを設定できます。

{{ old('name', @$item->name) }}

初期データが存在しない場合は、「@」をつけるなどしてエラー回避してもよいでしょう。

演習

編集画面のバリデート

編集処理をItemRequestを使ってバリデートしてみましょう。

Laravel超入門