Fortifyライブラリ使用にあたってのテクニック
PHP 7.4、Laravel 8を使用することとする。データベースはMySQLを使用。Webサーバーは、nginxを使用。docker環境構築してます。dockerでのphpコンテナ内にcomposerをインストール済です。
Fortifyのセットアップ
Fortifyを、ServiceProviderの仕組みを利用して、使用できるようにしていきます。
phpコンテナ内に入り、
composer require laravel/fortify ・・・*1
php artisan vendor:publish --provider="Laravel\Fortify\FortifyServiceProvider" ・・・*2
その後、マイグレーションをしておきます。
php artisan migrate
次に、configディレクトリ内のapp.phpを下記のように修正します。
① 'locale' => 'ja'
②
'provider' => [
//中略
App\Providers\FortifyServiceProvider::class,
]
③FortifyServiceProvider.php内のbootメソッドの修正
bootメソッド内に下記を入れておきます。
Fortify::createUsersUsing(CreateNewUser::class);
Fortify::registerView(function () {
return view('auth.register');
});
Fortify::loginView(function () {
return view('auth.login');
});
RateLimiter::for('login', function (Request $request) {
$email = (string) $request->email;
return Limit::perMinute(10)->by($email . $request->ip());
});
④RouteServiceProvider.phpの修正検討
⑤エラー文を日本語にするために日本語ファイルのインストール
composer require laravel-lang/lang:~7.0 --dev
cp -r ./vendor/laravel-lang/lang/src/ja ./resources/lang/
*1 composer requireについて
*2 vendor:publishについて
Bladeファイルの用意
Fortifyを利用する場合は、自分でBladeファイルを用意する必要があります。その場合、埋め込むように要求されたものを埋め込んでおかないと、うまくいきません。
登録画面に必要な埋め込みコード
なお、Actions>fortify>PasswordValidationRules.phpの 'confirmed'
を削除することで確認パスワードを無効にすることができます。
ログイン画面に必要な埋め込みコード
登録画面やログイン画面に、バリデーションをつける方法
FortifyServiceProvider.php内に下記を記載すれば、自分が作成したLoginRequestを反映することができる。
$this->app->bind(FortifyLoginRequest::class, LoginRequest::class);
FortifyのURLを変更する方法

その他
Q1. ログインした後どの画面を表示するかを設定するには?
A1. RouteServiceProvider.php内の下記の部分を変更すればよい
public const HOME = '/';
上記では、ログインすると、『/(ルートディレクトリ)』に行きます。
Q2. 会員登録直後に、どの画面に遷移するかを設定するには?
A2. FortifyServiceProvider.php内の、FortifyServiceProviderクラスのregisterメソッド内に下記を追記すればよい。
$this->app->instance(RegisterResponse::class, new class implements RegisterResponse {
public function toResponse($request){
return redirect('/mypage/profile');
}
});
Q3. ログアウトしたときに、どの画面に遷移するかを設定するには?
A3. 上のRegisterResponse → LogoutResponseに変更したものを追記すればよい。
Q4. Eメール認証の流れにおいてもこれらの記載方法が使える。どのように記載すればよいか?
$this->app->instance(RegisterResponse::class, new class implements RegisterResponse {
public function toResponse($request){
return redirect('/email/verify');
}
});
$this->app->instance(VerifyEmailResponse::class, new class implements VerifyEmailResponse {
public function toResponse($request){
return redirect('/mypage/profile');
}
});
Q5. メール認証をはずすにはどうすればよいか?
A5. A4の記載を下記に変更すればよい。
$this->app->instance(RegisterResponse::class, new class implements RegisterResponse {
public function toResponse($request){
return redirect('/mypage/profile');
}
});
シーダー、ファクトリを利用してダミーデータを入れる
ファクトリ×日本語
config/app.php内の
'faker_locale' => 'ja_JP'
できるだけコーディング量を減らすテクニック
CSSのコーディングを減らすためには、、、
Bladeファイルの仕組みを利用する。すなわち、layoutsディレクトリ内に、app.blade.phpを作成し、その中に、共通規則を記載したcommon.cssを読み込むようにしておく。
なお、リセットcss?もここに入れておく。
すなわち、app.blade.php内の、headタグ内の最後に下記をいれておく。
<link rel="stylesheet" href="https://unpkg.com/ress/dist/ress.min.css" />
<link rel="stylesheet" href="{{ asset('css/common.css')}}">
コメント