Laravelの知識を資産化していく①

#前提として

+ 自分が勉強してきた知識を保存するために書いています。
+ 本当に初歩的な事から書いていってます。
+ 万が一間違っている可能性もございますので、その時はご指摘頂ければ嬉しいです。
+ 常時更新していく予定です。
+ アウトプット用ですので、MAMPを使用していきます。


##Laravelのインストール

``` terminal:ターミナル
$ composer create-project laravel/laravel task_test --prefer-dist "6.0.*"
```

上記のコマンドでバージョンを指定してプロジェクトを作成していきます。
「task_test」の箇所がプロジェクト名になります。
この他にもいろいろな書き方があります。

``` terminal:ターミナル
# バージョンの指定なし(最新版のLaravelをインストール, 初期値でmysqlを利用する)
$ composer create-project --prefer-dist laravel/laravel プロジェクト名

# バージョンの指定あり(初期値でmysqlを利用する)
$ composer create-project --prefer-dist "laravel/laravel=5.5.*" task_test

#書き方はいろいろある
$ composer create-project laravel/laravel task_test --prefer-dist "5.5.*"
```

## タイムゾーンを日本語に変更

``` config:config/app.php
'timezone' => 'UTC',
#UTCをAsia/Tokyoに変更します
'timezone' => 'Asia/Tokyo',
```


##言語を日本語に変更

```config:config/app.php
'locale' => 'en',
#enをjaに変更します
'locale' => 'ja',
```

##DBの文字設定

```config:config/app.php
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',

#mb4を消す(顔文字を不要)
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
```

##デバッグバーのインストール

``` terminal:ターミナル
$ composer require barryvdh/laravel-debugbar
```

画面の下にデバッグバーが表示される

メモリ割当などの設定を弄らないとダメな時は、

```terminal:tinkerの導入
COMPOSER_MEMORY_LIMIT=-1 composer require barryvdh/laravel-debugbar
```

「COMPOSER_MEMORY_LIMIT=-1」で、メモリの制限を無しにする。

+ [composer requireで"Allowed memory size of 1610612736 bytes exhausted"エラーが出た場合の対処法](https://qiita.com/96kuroguro/items/51a7be874e624227a3bb)

![debugbar.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/968ea96d-a6ec-2c24-df79-584fab898b64.png)

画面上で非表示にするために、.envファイルを変更する

``` .env:.env
APP_DEBUG=true
#falseに変更します
APP_DEBUG=false
```

これをしても画面に残っている場合は、キャッシュを消す

``` terminal:ターミナル
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
```

何かと反映しない場合は、上記のコマンドでキャッシュを削除して反映させるので、このコマンドはよく使う。

+ [Laravelデバッグバー を使ったデバッグ方法](https://laraweb.net/practice/4523/)


##データベース設定

.envファイル内の下記のDB設定における、DATABASE名、USERNAME名、PASSWORDを設定していく

``` env:.env(初期設定)
// アプリ名の変更
APP_NAME=Laravel

//DB情報を変更する
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
```


##MAMPでデータベースを作成する

![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/22c93c99-d2ae-5704-95c0-901d50abd535.gif)

##MAMPでUSERを作成する

上の「特権」から、新規作成の「ユーザーアカウントを追加」をクリック

![tokken.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/e3fb780f-2566-0762-1436-5b705189718b.png)

ユーザー名とパスワードを入力する。

```
今回はテスト用として作成する

・　ユーザー名 ： laravel_user
・　パスワード　：　password123
・　再入力　　：　password123

入力後、1番右下の「実行」をクリックする
```

![user_add.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/346af7a5-183c-9699-62a9-c68cebc8f23a.png)


新しく作成したユーザーが追加されたのを確認する

![user_tuika.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/63010039-2dae-40ec-f72b-efee2de8299e.png)


##作成した情報を.envに記述する

``` env:.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306 //ここはMAMP上で設定されたlocalhostになる
DB_DATABASE=laravel_task
DB_USERNAME=laravel_user
DB_PASSWORD=password123
```

##データベースの接続確認

```
$ php artisan migrate
```

以下のように出れば接続できてます。

![migration_file.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/daf9331c-a8a1-82a1-b15b-b2e2b4b45734.png)


phpMyAdminでも確認してみる

![laravel_database.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/deb5c96c-4096-c95e-da0b-02d3cf03adf7.png)


これでLaravelとphpMyAdmin(データベース)の接続が完了。


##Laravelの概要

###MVCモデル

```
・　Model : データベースとやりとり
・　View  : 見た目
・　Controller : 処理

・　Routing　：　アクセスの振り分け
・　Migration　：　DBテーブルの履歴管理
```

+ [Laravelのディレクトリ構造とMVCの処理の流れを理解する](https://miyabi-lab.space/blog/22)


##ルーティング

なぜこの画面が表示できているのか??

![home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/ffc5ea72-9da7-7248-68ee-ea0ad2131c03.png)


この画面に行くルーティングを確認する

``` routes:routes/web.php
<?php
   ・
   ・
   ・

Route::get('/', function () {　//アドレスで処理をする('/'はトップ画面)
    return view('welcome'); //viewの中の welcome というファイルの中身が表示されるように指示する
```

##ビュー


+ [PHPフレームワーク「Laravel」におけるビューの使い方を理解しよう](https://codezine.jp/article/detail/11455)
+ [Laravel公式：Bladeテンプレート](https://readouble.com/laravel/6.x/ja/blade.html)


###ビューの基本的な考え方①

+ app.blade.phpなどの土台となるhtmlを用意する
+ その中にコンテンツを入れたい場所に @yieid を記述する
+ 他のbladeファイルは、 @extends で土台となるapp.blade.phpを呼び出す
+ 呼び出したら、 @yieid の部分を @section で記述する
+ 部分テンプレートが必要な場合は、 @include で呼び出す

###ビューの基本的な考え方②

+ viewファイルの指定は、 layout.app のように、 「.」 で指定する
+ 「.」で指定するのは、viewであったり、 web.php の name など。

###ビューの基本的な考え方③

コントローラで変数を定義する

``` :コントローラ
$test_1 = 1;
$test_2 = 2;

return view('posts.index', compact('test_1', ''_test_2))
```

コントローラから渡された変数は {{}} で使用する

``` :変数をviewで使用する
<div>
  {{ $test_1 }}
</div>
```

###@yieid

指定した @section の内容を表示する。
つまり、 @section の内容を埋め込みたい場所

``` :app.blade.php
@yieid('content')
```


``` :index.blade.php
@section('content', 'これが表示されます')
@section('content')
こんな書き方もあります
@endsection
```

###@sectionの使い方

**基本**

①@yieid の場所に @section ~ @endsection で記述を追加する

②@yieid なしでも、 @section ~ @show で表示可能。また、 @section で上書きをしたり、
@section ~ @parent ~ @endsection で @show の内容を残しつつ、さらに記述を追加できる

``` :@sectionの書き方
//① @endsectionを使わない場合
@section('title', 'アプリ名')

//①で変数を渡す場合
@section('title', $post->title)

//② @endsectionを使う場合
@section('content')
 <a></a>
@endsection
```

つまり、 @yieid を指定して @endsection を使って書くか、そうでないかのやり方が基本となる


###@includeは部分テンプレート

``` :まとめ
// 呼び出すだけ
@include('layouts.header')

// 変数を渡して呼び出す
@include('layouts.header', ['テンプレート内の変数' => 渡す値])
```

headerを別ファイルにまとめて、土台となるapp.blade.phpに読み込ませる

``` :layouts/app.blade.php
<body>
  <div class="flex-center position-ref full-height">
    @include('layouts.header')  // views/layouts/header.blade.php を読み込む
  </div>
</body>
```

変数を渡す場合

``` :app.blade.php
<body>
  <h1>All the items:</h1>
  @foreach ($items as $foo)
    @include('partials.item-display', ['item' => $foo])
  @endforeach
</body>
```

``` :item-display.blade.php
<div>
  Name: {{ $item->name }}<br>
  Description: {{ $item->description }}
</div>
```


+ extends したテンプレートへ挿入したい section はどこに書いても良い
+ extends 宣言の前でも後でも良い
+ include したテンプレートへ挿入したい sectionは、 include するより先に section を書かないといけない
+ section の記述後に include しないといけない



##Artisanコマンド

+ artisanコマンドの一覧を表示

```
$ php artisan list
```

+ モデルファイルの作成

```
・　$ php artisan make:model ファイル名  //モデルファイルを作成  ファイル名は単数形で作る

・　$ php artisan make:model ディレクトリ名/ファイル名  //ディレクトリ作成後、直下にモデルファイルを作成
```

+ マイグレーション関係

``` :マイグレーションファイルの作成
$ php artisan make:migration create_テーブル名_table　//テーブル名は複数形で作る
```

``` :マイグレーションを実行
$ php artisan migrate
```

``` :マイグレーションの履歴を確認
$ php artisan migrate:status
```

``` :マイグレーションをロールバックする
$ php artisan migrate:rollback // １つ前に戻る

$ php artisan migrate:rollback --step=5  // 5つ前まで戻る
```

+ コントローラーファイルを作成

```
$ php artisan make:controller ファイル名Controller
```

+ ルーティングの一覧を確認する

```
・　$ php artisan route:list  // ターミナルで確認

・　$ php artisan route:list > route.text  // ファイルで確認
```


##モデル

DBのやり取りをPHPで書ける

ORM(Object-Relational Mapping)/ORマッパーなど

Laravelでは「Eloquent(エロクアント)」がORマッパーの役割をする。

+ [Laravel公式：Eloquent ORM](https://readouble.com/laravel/6.x/ja/eloquent.html)


+ モデルファイルを作成する

```
$ php artisan make:model Models/Test

// Modelsディレクトリ作成後、直下にTest.php というModelファイルが作成される
```

``` app/Models/Test.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Test extends Model
{
    //
}
```


##マイグレーション(Migration)

DBテーブルの履歴を管理する
新しくテーブルを作るのはもちろん、カラムを追加、削除したりと、履歴が分かる仕組み。

###作成のやり方

```
$ php artisan make:migration create_tests_table
```

``` database/migrations/****_**_**_******_create_tests_table.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateTestsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tests', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('tests');
    }
}

```

「*」には作成した日付(年・月・日・時間)が入る

カラムを作成するにはいくつか型式があるので、公式を確認する
[Laravel公式：データベース：マイグレーション 使用できるカラムタイプ](https://readouble.com/laravel/6.x/ja/migrations.html)


###カラムを追加してみる


``` database/migrations/****_**_**_******_create_tests_table.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateTestsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('tests', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('text', 100);  //カラムを追加
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('tests');
    }
}

```

###マイグレーションを実行する

``` :マイグレーションを実行
$ php artisan migrate
```

![migration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/4d40a372-bc49-9913-3956-df1982b8c1f7.png)


+ testsテーブルが追加されたかデータベースを確認する

![testsTable.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/1580814d-3a35-aadc-dc60-d94ad5b945da.png)


+ カラムも確認する

![testsColumn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/8c33916b-4476-7b61-3019-85c5fa5127cd.png)


##tinker(DB簡易接続)

DBと簡単に接続できる仕組み。

+ [Laravelのtinkerを使えるとちょっと幸せになれる](https://qiita.com/juve_534/items/96dc6e7e0652dced1428)
+ [Laravel 標準搭載のデバッグ機能 tinker コマンドのご紹介]
(https://qiita.com/ucan-lab/items/0e9537be6d5709e1d099)

###tinkerの導入

```
$ composer require laravel/tinker
```


###実際に使う

``` :tinker起動コマンド
$ php artisan tinker

Psy Shell v0.9.12 (PHP 7.4.12 — cli) by Justin Hileman
>>>
```

```
>>> $test = new App\Models\Test;  //モデルをインスタンス化して使う
=> App\Models\Test {#3241}
>>> $test->text = "aaa"; //textカラムに「aaa」と文字を打ってみる
=> "aaa"
>>> $test->save();  //保存する
=> true  //保存成功
>>> App\Models\Test::all();  //Testに入っているデータを全て表示できる
=> Illuminate\Database\Eloquent\Collection {#3964
     all: [
       App\Models\Test {#3963
         id: 1,
         text: "aaa",
         created_at: "2021-04-09 14:22:48",
         updated_at: "2021-04-09 14:22:48",
       },
     ],
   }
```

+ データベースを確認すると、データが反映されている

![tinkerData.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/8b12311d-b126-a64e-46f8-847952283b89.png)


##コントローラー

+ ファイルを作成する

```
$ php artisan make:controller TestController
```

``` :app/Http/Controllers/TestController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestController extends Controller
{
    //
}
```


##MVCモデルの書き方

+ ルーティングからコントローラーに飛ばす

``` :routes/web.php
<?php

// tests/test にアクセスしたら、TestControllerのindexメソッドに飛ばす
Route::get('tests/test', 'TestController@index');
```

+ コントローラに処理を書く

``` :app/Http/Controllers/TestController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestController extends Controller
{
    public function index() //ルーティングから飛んできた処理をここで受け取る
    {
        return view('tests.test'); //testsディレクトリのtestファイルに飛ばす
    }
}
```

+ ビューにファイルを作成し、testファイルの中身を表示する

※ビューファイルは基本的に、○○.blade.php とファイル名をつける

``` :resources/views/tests/test.blade.php
test
```

簡易サーバーを立ち上げ、「test」と出力されているのを確認する

![test.blade.php.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/51ee5d20-dac5-d224-f589-f6d76b2242aa.png)


##データベースから中身を持ってきて表示してみる

``` :app/Http/Controllers/TestController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Test;  //ModelsのTest.phpを持ってくる

class TestController extends Controller
{
    //
    public function index()
    {
        $values = Test::all();

        // $dd($values); //dd は、変数の処理を止めて中身を確認する

        // コントローラーからビューファイルに $values の変数を渡す
        return view('tests.test', compact('values')); //compactで変数を渡す
    }
}
```

+ [Laravelのdd()](https://qiita.com/kyohei121877/items/ba596b57d6027cc21166)


###foreachで１つずつ表示させる

``` :resources/views/tests/test.blade.php
test<br>

@foreach($values as $value)
{{ $value->id }}<br>
{{ $value->text }}<br>
@endforeach

// データベースに入っている内容が表示される
```

![test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/789c4168-5a03-e95d-98be-7c5a6cefa060.png)


##ヘルパ関数

Laravelが用意している便利な関数

+ [Laravel公式：ヘルパ関数](https://readouble.com/laravel/6.x/ja/helpers.html)
+ [全142種類！Laravelヘルパー関数実例](https://blog.capilano-fw.com/?p=837)

こちらは種類が多いので別でアウトプット記事書きます。


##コレクション型

配列を拡張した型

```
・　データベースからデータ取得時はコレクション型になっている
・　コレクション型専用の関数は多数ある
・　メソッドチェーンで記述可能
```

+ [Laravel公式：コレクション](https://readouble.com/laravel/6.x/ja/collections.html)
+ [全117種類！Laravel 5.6〜7.xのコレクション実例](https://blog.capilano-fw.com/?p=727)

こちらは種類が多いので別でアウトプット記事書きます。


##クエリビルダ

クエリをPHPで書ける

```
・　Select, where, groupbyなど、SQLに近い構文

・　DB::table(テーブル名)-> というようにつなぐ
```

+ [Laravel公式：クエリビルダ](https://readouble.com/laravel/6.x/ja/queries.html)
+ [LARAVEL クエリビルダでDB操作](http://vistylee.com/laravel-db-querybuilder/)


DBファサードを使用する

``` :app/Http/Controllers/TestController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Test;

use Illuminate\Support\Facades\DB;

class TestController extends Controller
{
    //
    public function index()
    {
        $values = Test::all();

        // 静的メソッド // select で id を指定して、get で値をとる
        $tests = DB::table('tests')->select('id')->get();

        // dd($values);

        return view('tests.test', compact('values'));
    }
}
```

こちらは種類が多いので別でアウトプット記事書きます。


##ファサード

config/app.phpの'aliases' で定義されているのが使える。

+ [Laravel公式：ファサード](https://readouble.com/laravel/6.x/ja/facades.html)
+ [PHPによるデザインパターン入門 - Façade〜シンプルな唯一の窓口](http://shimooka.hateblo.jp/entry/20141215/1418620292)

こちらは種類が多いので別でアウトプット記事書きます。


##DI(Dependency injection）

依存性の注入。

```
クラスの内部でインスタンス生成(new)するのではなく、外部で用意して注入すること。
↓
クラスの中で new をしない。
```

お問い合わせフォームを作るときに使う。

+ [Laravelﾜｶﾝﾈ(ﾟ⊿ﾟ)から「完全に理解した（）」までステップアップ](https://qiita.com/namizatork/items/801da1d03dc322fad70c)


##Blade

テンプレートエンジンのこと。

```
・　{{}} でエスケープ処理して表示する
・　@csrfでCSRF(cross-site request forgeries)対策
・　@foreach @endforeach で配列表示
・　@section @yield などでテンプレート読み込み
```

welcomeページのファイルを確認してみる

``` :resoureces/views/welcome.blade.php

// @で書かれたものがbladeの構文
<?php

   ・
   ・
   ・
    <body>
        <div class="flex-center position-ref full-height">
            @if (Route::has('login'))  //テンプレート構文
                <div class="top-right links">
                    @auth  //ログイン機能をつけていると、ログイン後に表示
                        <a href="{{ url('/home') }}">Home</a>
                    @else
                        <a href="{{ route('login') }}">Login</a>

                        @if (Route::has('register'))
                            <a href="{{ route('register') }}">Register</a>
                        @endif
                    @endauth
                </div>
            @endif

            <div class="content">
                <div class="title m-b-md">
                    Laravel
                </div>

                <div class="links">
                    <a href="https://laravel.com/docs">Docs</a>
                    <a href="https://laracasts.com">Laracasts</a>
                    <a href="https://laravel-news.com">News</a>
                    <a href="https://blog.laravel.com">Blog</a>
                    <a href="https://nova.laravel.com">Nova</a>
                    <a href="https://forge.laravel.com">Forge</a>
                    <a href="https://vapor.laravel.com">Vapor</a>
                    <a href="https://github.com/laravel/laravel">GitHub</a>
                </div>
            </div>
        </div>
    </body>


```

※　{{}} はXSS攻撃を防ぐため、自動的にPHPの htmlspecialchars 関数を通される。

+ [Laravel公式：Bladeテンプレート](https://readouble.com/laravel/6.x/ja/blade.html)
+ [クロスサイトスクリプティング（XSS）とは｜攻撃の仕組みと対策方法を解説](https://www.amiya.co.jp/column/cross_site_scripting_20210118.html)

##フロントエンド

Laravelで設定が必要なもの

```
・　laravel-ui  // Laravel6.xから
・　laravel-mix  // webpackのラッパー
・　webpack.mix.js　// laravel-mixの設定ファイル
・　package.json, package.lock  //設定管理ファイル


・　Node.js/npm  // 別途インストール
```

##Laravel-ui 認証

``` :Laravel/uiパッケージをインストール(laravel6の場合)
$ composer require laravel/ui:^1.0 --dev
$ composer require laravel/ui "1.*"
```

``` :フロントエンドのスカフォールドをインストール
// 基本的なスカフォールドを生成
$ php artisan ui bootstrap
$ php artisan ui vue
$ php artisan ui react

// ログイン／ユーザー登録スカフォールドを生成
$ php artisan ui bootstrap --auth
$ php artisan ui vue --auth
$ php artisan ui react --auth
```

今回はログイン・ユーザー登録スカフォールドをインストールしていく

```
$ php artisan ui bootstrap --auth
```

ログイン、ユーザー登録関連などのファイルがそれぞれ作成される

ブラウザで確認してみる

```
$ php artisan serve
```

右上に「ログイン」と「ユーザー登録」のボタンができている

![laravel_ui.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/76e98233-0eb4-124a-f94d-cac69871bad3.png)


###Bootstrapをインストールしていく

package.json ファイルの "devDependencies" 内にあるバージョンをインストールしていく

![npmInstall.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/167d57c4-a324-4289-8688-7986725fc7d8.png)


``` :依存パッケージのインストール
$ npm install
```

「node_modules」というファイルができればOK

コンパイルをしていく

```
$ npm run dev
```

毎回コンパイルをしないといけなくなるので、常に監視しているようにする

```
$ npm run watch
```

```
※　ターミナルを3つ起動しておき、

・　監視用(npm run watch)
・　ブラウザ用(php artisan serve)
・　作業用
```

この画面出たらコンパイルできてます!!

![compiled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/f435e061-8035-56d3-637b-4c69a6983fd0.png)

ブラウザで「ログイン画面」と「ユーザー登録画面」を確認する

・　ログイン画面

![Login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/4f396d72-3409-aa30-6dd9-44385182b8f8.png)

・　ユーザー登録画面

![Register.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/2500b780-65b0-511c-e53a-d2a4413dc08b.png)

+ [Laravel公式：JavaScriptとCSSスカフォールド](https://readouble.com/laravel/6.x/ja/frontend.html)


##エラーメッセージの日本語化

①下記のリンクを開く
[https://github.com/minoryorg/laravel-resources-lang-ja](https://github.com/minoryorg/laravel-resources-lang-ja)

②ファイルのダウンロード

![validation_ja.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/78682687-04e7-a16a-762e-f71d011ecc33.png)

③ダウンロードしたフォルダを開いて、「ja」というフォルダを確認する

![ja.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/e7310613-4cce-8f49-3855-5640a33cfea1.png)

④resources/langフォルダに、ダウンロードしたjaフォルダを追加

![lang_ja.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/439a677a-1c74-6f9f-244e-d897b957a3c1.png)


※passwordなどの英語表記のものを日本語にするには、'attributes'内に項目を追加する

``` :resources/lang/ja/validation.php
'attributes' => [],  //1番下の attributes にパスワードの項目を追加する

'attributes' => [
        'password' => 'パスワード'
    ],
```

設定後に確認すると、エラーメッセージが日本語になる。

![error_message.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/556828/ba997a5b-2aed-2fa4-eae3-d132c5ca4baf.png)



####今後も随時更新していきます。