laravelにおけるユーザー管理機能の実装方法
1.目的
ユーザーの管理ができるように機能を実装する。
2.必要なもの
なし
3.手順
①terminalにて以下のコマンドを実行しlaravel/uiパッケージをインストールします。
% composer require laravel/ui --dev
②以下のようにartisanコマンドを実行します。
% php artisan vi vue --auth
③以下のコマンドで*npmパッケージをインストールします。
% npm install
*npmパッケージ
npmの正式名称は、Node Package Managerです。
npmの正式名称からも解るように、Node.jsのパッケージ(Package )を管理する(Manager)ツールです。
Node.jsのパッケージ(Package)とは、予め用意された便利な機能をまとめたものです。
④以下のコマンドでパッケージをビルドします。
% npm run dev
⑤次にデーターベースにテーブルを作成していきます。
Sequel Proにてデーターベースの追加を行います。
このまま、php artisan migrateした場合以下のようなエラーが発生します。
1071 Specified key was too long; max key length is 767 bytes
・WHY
Laravelでは、バージョン5.4以降に、MySQLのデフォルトキャラクタセットがutf8mb4に変更されました。
Laravelがデフォルトのキャラクタセットをutf8mb4に変更した理由は、UTF8の絵文字などをDBに正しく保存出来るようにしたためです。
utf8mb4のキャラクタセットだとデータを格納する際、1文字当たり4byteの領域が必要です。また、Laravelのマイグレーションではstring型のカラムを作ったときに、varchar(255)としてデータ型を指定します。utf8mb4のcharasetで255文字を格納する列を作った場合、データ長は最大255*4=1020byteになります。
一方で、MySQLのVer5.7.7以前の場合、テーブルのIndexに指定できるデータ長は最大767byteです。
このため、Ver5.7.7以前のMySQLに対してテーブルの作成を行うと、MySQLが許容するIndexのデータ長767Byteを超えてしまい、エラーmax key length is 767 bytesが発生します。
⑥以上の理由のため、MySQLのバージョンを5.7.7以降にアップデートしたり、DBのcharasetをutf8mb4にしない"という選択肢もありますが、文字列型の列を作る時にデフォルトのデータ長を変更してしまうのが最も簡単です。
Laravelのマイグレーションで、create tableする時に、varcharのデータ長を191文字になるよう変更します。191文字にすることで、191*4=764byteとなるためindexの最大長である767byte以内に収まります。
実際に変更するファイルは、app\Providers\AppServiceProvider.phpで以下のように変更します。
<?
php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
//以下追加
use Illuminate\Support\Facades\Schema;
//ここまで
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//以下追加
Schema::defaultStringLength(191);
//ここまで
}
}
⑦次にterminalにて以下のコマンドを実行し、テーブルを作成します。
% php artisan serve
⑧以下のurlに遷移し登録ができログインできるかどうか確認をします。
http://localhost:8000/register
この記事が気に入ったらサポートをしてみませんか?