「PHPエンジニアにおくるLaravel6予習入門」の感想・備忘録

スポンサーリンク

kindle本「PHPエンジニアにおくるLaravel6予習入門」のまとめ。

点数

71点

感想

内容が少し薄いように感じた。

それでも簡単なWEBアプリを短時間で実装する場合は、この書籍の内容で充分だと思う。

ユーザー認証の実装方法の解説はとてもわかりやすかった。

ルーティング

ルーティングの確認

php artisan route:list

認証ミドルウェアを導入した場合など、route/web.php以外にルーティングが定義される場合もあるので、コマンドでの確認は役に立つことが多い。

ミドルウェア

VerifyCsrfTokenを除外したいURLの定義

app/Http/Middleware/VerifyCsrfToken.phpの$except配列にURIを追加する。

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * Indicates whether the XSRF-TOKEN cookie should be set on the response.
     *
     * @var bool
     */
    protected $addHttpCookie = true;

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'hoge/*',
        'http://127.0.0.1:8000/hoge2/store',
    ];
}

authミドルウェアとguestミドルウェア

app/Http/Kernel.phpの$routeMiddlewareでauthはAuthenticate, guestはRedirectIfAuthenticatedのクラスがそれぞれ定義されている。

ルート定義、コントローラのコンストラクタ、などで使用するミドルウェアを指定する。

public function __construct()
{
    $this->middleware('guest'); // guestミドルウェアを使用
}

authミドルウェア

  • 認証済かの判定。
  • 会員用ページに設置する。
  • 認証されていない場合、’login’ルートにリダイレクトされる。

guestミドルウェア

  • 認証されていないかの判定。
  • 会員登録ページなどに設置する。
  • 認証済の場合、RouteServiceProvider::HOMEへリダイレクトされる。

ビュー

compact関数を使ってビューに変数を渡すと便利

public function index(Request $request)
{
  $var1 = 100;
  $var2 = 200;
  return view('index.index', compact('var1', 'var2'));
}

ループ変数は@foreach内でのみ使うことができる

@foreach (['aaa', 'bbb', 'ccc'] as $num)
    {{ $loop->index }}:{{ $num }}
@endforeach

改行

{!! nl2br($msg) !!}のようにする。

ユーザー認証

作成手順

  1. マイグレーションを実行しusersテーブルを作成する
    php artisan migrate
  2. laravel/uiパッケージのインストール
    composer require laravel/ui
    (Laravel6の場合はcomposer require laravel/ui 1.*)
  3. scaffoldを実行
    php artisan ui vue --auth
    以下のファイル・ディレクトリが生成・更新される。
    ・app/Http/Controllers/HomeController.php app/Http/Controllers/Auth/
    ・resources/js/components/ExampleComponent.vue
    ・resources/views/auth/ resources/views/layouts/app.blade.php
    ・routes/web.php
    画面右上にLOGINとREGISTERのリンクが表示される。
  4. node.jsライブラリのインストールとコンパイル
    npm install && npm run dev
    CSSが適用され、デザインが綺麗になる。

解説

app/Http/Controllers/Auth/RegisterController.php

use RegistersUsers; // メインロジックはRegistersUsersトレイトである
protected $redirectTo = RouteServiceProvider::HOME; // ユーザー登録後のリダイレクト先
public function __construct()
{
    $this->middleware('guest'); // guestミドルウェアを使用
}

app/Http/Controllers/Auth/LoginController.php

use AuthenticatesUsers; // メインロジックはAuthenticatesUsersトレイトである
protected $redirectTo = RouteServiceProvider::HOME; // ログイン後のリダイレクト先
public function __construct()
{
    $this->middleware('guest')->except('logout');  // guestミドルウェアを使用(logoutの場合は除く)
}

メールアドレスではなくユーザー名で認証する場合

  1. usersテーブルのnamカラムにuniqueインベックスを生成する。
  2. RegisterControllerのnameのバリデートルールにunique:usersを追加。
  3. LoginControllerでusernameメソッドを定義。
    AuthenticatesUsersトレイトのusernameメソッドはreturn 'email';となっているので、オーバーライドしてreturn 'name';とする。

ユーザー情報取得

Authファサードでログイン中ユーザーの情報を取得することができる。

use Auth;
として
Auth:id(); // usersのid
Auth::user(); // Userインスタンス

コメント