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) !!}
のようにする。
ユーザー認証
作成手順
- マイグレーションを実行しusersテーブルを作成する
php artisan migrate
- laravel/uiパッケージのインストール
composer require laravel/ui
(Laravel6の場合はcomposer require laravel/ui 1.*
) - 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のリンクが表示される。 - 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の場合は除く)
}
メールアドレスではなくユーザー名で認証する場合
- usersテーブルのnamカラムにuniqueインベックスを生成する。
- RegisterControllerのnameのバリデートルールに
unique:users
を追加。 - LoginControllerでusernameメソッドを定義。
AuthenticatesUsersトレイトのusernameメソッドはreturn 'email';
となっているので、オーバーライドしてreturn 'name';
とする。
ユーザー情報取得
Authファサードでログイン中ユーザーの情報を取得することができる。
use Auth;
としてAuth:id(); // usersのid
Auth::user(); // Userインスタンス