概要
Symfonyのデフォルトの機能で認証処理を実装するとエラーメッセージが「資格が無効です。」となりユーザーフレンドリーではないため変更する。
UserAuthenticationProviderクラスでSymfony3までは「Bad credentials.」と返しており、Symfony4では、「Invalid credentials.」と返しているため、これを翻訳している。
ここのメッセージを変更するためだけに独自Providerを作るのはカナリ手間なので翻訳を書き換えて対応する。
環境
- PHP → 7.1.23
- symfony/symfony → v3.4.18 / v4.4.0
Configの言語指定の確認
「jp」ではなく「ja」である事に注意
symfony3
app/config/config.yml
parameters:
# デフォルトだと「en」
locale: ja
symfony4
%kernel.project_dir%/config/packages/translation.yml
framework:
default_locale: ja # デフォルトだと「en」
translator:
default_path: '%kernel.project_dir%/translations'
fallbacks:
- ja # デフォルトだと「en」
翻訳の書き換え
Symfony3
app/Resources/translations/messages.ja.yml
# ログインエラー時のメッセージがユーザーフレンドリーではないため
Bad credentials.: "ユーザー名もしくはパスワードが間違っています。"
Symfony4
%kernel.project_dir%/translations/security.ja.yml
# ログインエラー時のメッセージがユーザーフレンドリーではないため
Invalid credentials.: "ユーザー名もしくはパスワードが間違っています。"
エラーメッセージ表示の準備
app/Resources/views/admin/login_sample.html.twig
<body>
<div class="login-form" >
<h1>管理画面ログイン</h1>
{% if error %}
<div class="alert-danger p-2">
{{ error.message | trans }}
</div>
{% endif %}
<form action="" method="post" >
{# ... #}
</form>
</div>
</body>