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, // ここを追加しました
],
これでユーザー情報を取得するコードを省略できます。