Laravel中級編②初期設定変更方法

中級編①で認証設定の方法を紹介しました。ただ、設定しても初期設定が気に入らないという人もいると思います。そんな悩みに対して解決する方法を紹介します。

この記事の対象者
  • エラーメッセージを日本語にしたい
  • パスワード変更のメールを編集したい
  • 認証機能をもっと知りたい

エラーメッセージを日本語にしたい

アカウントの作成やログイン時に使われているメッセージはデフォルトで英語になっています。日本語に変更するための手順を書いて行きます。

config/app.phpでlocaleをjaに変更する

デフォルトではenになっているので、jaに変更します。

'locale' => 'ja',

日本語の言語ファイルをダウンロード・インストールする

Laravelが提供している日本語ファイルをダウンロードしてます。

TerminalでLaravelのプロジェクトディレクトリに移動し、下記のコマンドを実行します。

php -r "copy('https://readouble.com/laravel/8.x/ja/install-ja-lang-files.php', 'install-ja-lang.php');"

install-ja-lang.phpというファイルがダウンロードされるので下記のコマンドでインストールします。

php -f install-ja-lang.php

インストールされたファイルはresources/lang/jaの中にあります。

インストールが完了したら下記のコマンドで使用したファイルを削除します。

php -r "unlink('install-ja-lang.php');"

ファイルの中身を編集する

一部登録されていない物があるので編集して行きます。

auth.php
'password' => '入力されたパスワードが正しくありません。'
validation.php
'declined' => ':attributeは拒否する必要があります。'
'declined_if' => ':otherが:valueの場合、:attributeを拒否する必要があります。'
'enum' => '選択された:attributeは無効です。'
'mac_address' => ':attributeは有効なMACアドレスである必要があります。'

メールのテンプレを変更したい

パスワードリセットのメールのテンプレを変更する方法を書いて行きます。

文書の変更

パスワード変更のメールはデフォルトで下記のようになっています。

変更するためには下記のファイルを編集します。

vender/laravel/framework/src/Illuminate/Auth/Notifications/ResetPassword.php

return (new MailMessage)
            ->subject(Lang::get('Reset Password Notification'))
            ->line(Lang::get('You are receiving this email because we received a password reset request for your account.'))
            ->action(Lang::get('Reset Password'), $url)
            ->line(Lang::get('This password reset link will expire in :count minutes.', ['count' => config('auth.passwords.'.config('auth.defaults.passwords').'.expire')]))
            ->line(Lang::get('If you did not request a password reset, no further action is required.'));

これをいろんなコマンドを使用して編集します。

変更ポイント
  • subject:メールの件名
  • line:文書
  • action:リンク先を乗せたボタンを設置
  • greeting:最初の挨拶を設定
  • salutation:設定しないとregards, Thanksとなります。

これらを使用して編集するだけです。簡単ですね。

ロゴの削除

デフォルトでは下記のようなLaravelのロゴが入っています。

ロゴを消すためにはTerminalから下記のコマンドを使用します。

php artisan vendor:publish --tag=laravel-notifications

email.blade.phpが編集できるようになるのですが、ロゴを消すためには下記のコマンドも必要です。

php artisan vendor:publish --tag=laravel-mail

このコマンドによって、「resources/views/vendor/mail/」の下に「header.blade.php」などのメールテンプレートのソースコードが作成されます。

ロゴを削除するためには下記の部分を削除しましょう。

@if (trim($slot) === 'Laravel')
<img src="https://laravel.com/img/notification-logo.png" class="logo" alt="Laravel Logo">
@else
{{ $slot }}
@endif

もう一度メールを送ると下記のようになっています。

ロゴがなくなっていますね。

全てのページに共通の引数を渡す

サイトの規模が大きくなると、毎回ユーザーの情報を取得してviewに渡すという処理を書いているとコードが重複して読みづらくなります。

コードをスリムに書くためにViewComposerを使いましょう。

①app/Providers/ViewServiceProvider.phpを編集します。

boot()が用意されているので、編集します。

class ViewServiceProvider extends ServiceProvider
{
    public function boot()
    {
        View::composer('*', function($view){

            if(auth()->check()) {

                $user = auth()->user();
                $view->with('user', $user); 

            }

        });
    }
}

全てのviewでuserを渡すという意味になります。

②config/app.phpを編集する

実装するためにはconfig/app.phpにViewServiceProviderを登録します。

'providers' => [

        // 省略

        App\Providers\ViewServiceProvider::class, // ここを追加しました

    ],

これでユーザー情報を取得するコードを省略できます。

関連記事