Laravelチップス

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を変更する方法

Laravel8 Jetstream / Fortify のURLを変更する - Qiita
やりたいこと認証とかのURLを変更したいやりかたFortifyFortifyServiceProviderのregisterメソッドにFortify::ignoreRoutes();を追加。~略~class FortifyServicePr...

その他

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')}}">

HTML/CSSだけで、JavaScriptやLivewireライブラリを使用せずに、モーダル画面を作成する方法

コメント

タイトルとURLをコピーしました