Laravel8基本設定

認証パッケージにLaravel Jetstream/Fortifyが導入されたり、ルーティングの書き方が変わったり、モデルのディレクトリが変更されてるようなのでインストールから基本的な設定をまとめておきます。

開発環境

Laradock v10
Laravel 8

インストール

今まで通り。

# composer create-project --prefer-dist laravel/laravel newproject

タイムゾーンとロケールの設定

今まで通り。

	'timezone' => 'Asia/Tokyo',
	'locale' => 'ja',

日本語化

Laravel8に対応してるようなので、今まで通り。
https://github.com/caouecs/Laravel-lang
src/jaディレクトリをresources/lang以下に配置
json/ja.jsonも同じくresources/lang以下に配置
※必要に応じてjson/ja.jsonファイルを変更します。

データベース(lara8)とメール(Gmail)を設定

今まで通り。

	DB_CONNECTION=mysql
	DB_HOST=mysql
	DB_PORT=3306
	DB_DATABASE=lara8
	DB_USERNAME=root
	DB_PASSWORD=root

	MAIL_DRIVER=smtp
	MAIL_HOST=smtp.gmail.com
	MAIL_PORT=587
	MAIL_USERNAME=xxxxxxxx@gmail.com
	MAIL_PASSWORD=xxxxxxxx
	MAIL_ENCRYPTION=tls
	MAIL_FROM_ADDRESS=xxxxxxxx@gmail.com
	MAIL_FROM_NAME="${APP_NAME}"

ストレージ公開

今まで通り。
storage/app/publicディレクトリを/publicとしてシンボリックリンクを張って公開します。

# php artisan storage:link

認証サービス導入

「Jetstream / Fortify」でとりあえず「Livewire + Blade」で・・・

	# composer require laravel/jetstream
	# php artisan jetstream:install livewire
	# php artisan migrate
	# npm install
	# npm run dev

認証後のリダイレクトパスはデフォルトで/dashboard
変更するにはRouteServiceProviderにHOME定数を設定
例)public const HOME = ‘/user’;

メール認証

①Fortifyの設定変更

その他認証で必要のない機能はコメントアウトすることで無効にできます。

	    'features' => [
	        Features::registration(),
	        Features::resetPasswords(),
	        // Features::emailVerification(),	// コメントアウトを外して有効に。
	        Features::updateProfileInformation(),
	        Features::updatePasswords(),
	        Features::twoFactorAuthentication([
	            'confirmPassword' => true,
	        ]),
	    ],

②MustVerifyEmailインターフェイスを実装

	class User extends Authenticatable implements MustVerifyEmail 

③必要に応じてプロフィール画像有効化

	    'features' => [
	        // Features::profilePhotos(),	// コメントアウトを外して有効に。
	        // Features::api(),
	        // Features::teams(),
	    ],

画像はstorage/app/public/profile-photosにアップロードされます。

メール送信時のSSLエラー対策

今まで通り、以下のようなエラーが出る場合は対策しておきます。

stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
	   'mailers' => [
        'smtp' => [
            'transport' => 'smtp',
            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
            'port' => env('MAIL_PORT', 587),
            'encryption' => env('MAIL_ENCRYPTION', 'tls'),
            'username' => env('MAIL_USERNAME'),
            'password' => env('MAIL_PASSWORD'),
            'timeout' => null,
            'auth_mode' => null,
            'stream' => [			// 以下追加
                'ssl' => [
                   'allow_self_signed' => true,
                   'verify_peer' => false,
                   'verify_peer_name' => false,
                ],
            ],
        ],

ルーティングの書式

app/Providers/RouteServiceProvicer.phpの名前空間変数$namespaceがコメントアウトされてるので

// protected $namespace = 'App\\Http\\Controllers';

①use宣言して

use App\Http\Controllers\TestController;

Route::get('/test', [TestController::class, 'index']);

②フルパスで指定して

Route::get('/test', [App\Http\Controllers\TestController::class, 'index']);
// または
Route::get('/test', 'App\Http\Controllers\TestController@index');

③RouteServiceProvicerのコメントアウトを外して名前空間変数を有効にして以前と同様に

Route::get('/test', 'TestController@index');

モデルのディレクトリ

app/Models以下に変更されたのでこのまま使います!

Vue.js

以前はVueも認証パッケージインストールするときに導入されたけど、今回は無いので必要に応じてインストールしないと・・・
ついでにVue-Routerも。

# npm install vue
# npm install vue-router
require('./bootstrap');

/** 以下追加 **/
import Vue from 'vue'
import router from './router';

// サンプル
//Vue.component('test-component',require('./components/Test.vue').default);

const app = new Vue({
    el: '#app',
    router,
});
# npm run dev